c++课程设计报告幻方.doc

上传人:laozhun 文档编号:2384450 上传时间:2023-02-17 格式:DOC 页数:27 大小:277.50KB
返回 下载 相关 举报
c++课程设计报告幻方.doc_第1页
第1页 / 共27页
c++课程设计报告幻方.doc_第2页
第2页 / 共27页
c++课程设计报告幻方.doc_第3页
第3页 / 共27页
c++课程设计报告幻方.doc_第4页
第4页 / 共27页
c++课程设计报告幻方.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《c++课程设计报告幻方.doc》由会员分享,可在线阅读,更多相关《c++课程设计报告幻方.doc(27页珍藏版)》请在三一办公上搜索。

1、C+程序设计课程设计报告选题名称: 幻方 系(院): 计算机工程学院专 业: 计算机科学与技术 班 级: 姓 名: 学 号: 指导教师: 学年学期: 2010 2011 学年 第 1 学期2010年 12 月 30 日设计任务书课题名称幻方设计目的1. 调研并熟悉幻方的基本功能、数据流程与工作规程;2. 学习幻方的奇数、单偶数和双偶数幻方和基于VC+集成环境的编程技术;3. 通过实际编程加深对基础知识的理解,提高实践能力;4. 学习开发资料的收集与整理,学会撰写课程设计报告。实验环境1. 微型电子计算机(PC);2. 安装Windows 2000以上操作系统,Visual C+6.0开发工具。

2、任务要求1. 利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;2. 在第15周末之前完成预设计,并请指导教师审查,通过后方可进行下一步工作;3. 本课题主要实现判断一个数是不是幻方,但判断这个数是奇数幻方还是偶数幻方,偶数幻方也分成单偶数幻方和双偶数幻方。4. 结束后,及时提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确,正文字数不少于3000字(不含代码)。工作进度计划序号起止日期工 作 内 容12010.12.202010.12.20在预设计的基础上,进一步查阅资料,完善设计方案,形成书面材料。22010.12.212010.1

3、2.22设计总体方案,构建、绘制流程框图,编写代码,上机调试。32010.12.232010.12.24测试程序,优化代码,增强功能,撰写设计报告。42010.12.252010.12.26提交软件代码、设计报告,参加答辩,根据教师反馈意见,修改、完善设计报告。指导教师(签章): 年 月 日 摘要:所谓幻方,就是一个n行n列的正方形,共有n2个格子,将1、2、3、n2这些数字放到这些格子里,使其每行的和、每列的和及两条对角线的和都是一个相同的数S,S称为幻和。当n为奇数时,称为奇数阶幻方,当n为偶数时,称为偶阶幻方。当n可被4整除时,称方为双偶幻方。当n不可被4整除时,称为单偶幻方。多少年来,

4、许多数学家都在研究这个古老而有趣的问题,试图找出一般的解法,但一般都是针对当n是奇数和n是4的倍数的情况。当n是奇数时的算法:首先,将1放在第一行中间一个格子里。其次,依次将后一个数放到前一个数的右上格,如:将2放到1的右上格。将放到的右上格等等。可能出现下面的情况。若右上格从上面超出,则将后一数放到与右上格同列的最后一行。若右上格从右面超出,则将后一数放到与右上格同行的最后一列。若右上格既从右面超出又从上面超出,则将后一数放到一数前一数的下面前一数的下面。若右上格已被数字填充,则将后一数放到前一数的下面依以上法则,你可以很快的写出奇数阶幻方!当然,这种写法只是其中一个答案,而不是唯一答案。关

5、键字:奇数幻方;单偶数幻方;双偶数幻方;循环;类的对象;目 录1课题综述41.1课题来源41.2预期目标51.3面对的问题51.4需解决的关键技术52系统分析62.1涉及的基础知识62.1.1头文件62.1.2类与对象62.1.4数组72.1.5开关语句72.2解决问题的基本思路及总体方案82.3算法描述及功能模块框图82.3.1奇数阶幻方(连续摆数法)82.3.2双偶幻方(对称幻方)92.3.3单偶幻方(斯特雷奇法)112.3.4 LUX方法 这是剑桥大学康韦教授发明的方法123系统设计133.1实现方法133.1.1奇数阶幻方制作(连续摆数法)133.1.2双偶幻方制作(对称法)133.1

6、.3单偶幻方制作(斯特雷奇法)133.2 流程图143.2.1主函数143.2.2奇数阶幻方154 代码编写与注释155程序调试216运行与测试21总 结25致 谢26参考文 献271课题综述1.1课题来源幻方又称为魔方,方阵或厅平方,它最早起源于我国。宋代数学家杨辉称之为纵横图。所谓纵横图,它是由1到n,这n个自然数按照一珲的规律排列成n行、n列的一个方阵。它具有一种厅妙的性质,在各种几何形状的表上排列适当的数字,如果对这些数字进行简单的逻辑运算时,不论采取哪一条路线,最后得到的和都是完全相同的。关于幻方的起源,我国有“河图”和“洛书”之说。相传在远古时期,伏羲氏取得天下,把国家治理得井井有

7、条,感动了上天,于是黄河中跃出一匹龙马,背上驮着一张图,作为礼物献给他,这就是“河图”,伏羲氏凭借着“河图”而演绎出了八卦,后来大禹治水时,咯水中浮出一只大乌龟,它的背上有图有字,人们称之为“洛书”。“洛书”所画的图中共有黑、白圆圈45个。把这些连在一起的小圆和数目表示出来,得到九个。这九个数就可以组成一个纵横图,人们把由九个数3行3列的幻方称为3阶幻方,除此之外,还有4阶、5阶. 后来,人们经过研究,得出计算任意阶数幻方的各行、各列、各条对角线上所有数的和的公式为:N=1/2n(n2+1)其中n为幻方的阶数,所求的数为N幻方最早记载于我国公元前500年的春秋时期大戴礼中,这说明我国人民早在2

8、500年前就已经知道了幻方的排列规律。我国不仅拥用幻方的发明权,而且是对幻方进行深入研究的国家。公元13世纪的数学家杨辉已经编制出310阶幻方,记载在他1275年写的续古摘厅算法一书中。在欧洲,直到574年,德国著名画家丢功绘制出了完整的4阶幻方。如今幻方已应用于科学技术之中。如在“建路”、“爵当曲线”、“七座桥”中的运用。幻方引出了拉普拉斯的导引系数和哥斯定理、格里定理、斯笃克 定理,还引出了普生、布鲁汀两氏的电子方程式。幻方还引出了桑南的自动控制论,从而促 成了电子计算机的诞生,电脑有三个来源,即二进制(八卦)、算盘和幻方。 可见,幻方知识在我国很早就有,它的应用前景也相当广阔,通过电脑知

9、识将幻方付诸实践,也是时代的需要。通过对这一课题的学习与研究,对我们拓宽知识面与实践能力的培养具有重要意义。1.2预期目标幻方制作=1奇数阶幻方2偶数阶幻方请选择(1或2,0:退出): 图1-1所示1.3面对的问题幻方是一个古老而又有趣的数学问题,要想解决它,首先要了解它的数学原理,然后用C+语言把它表示出来。我遇到的两个主要问题,也就随即产生了。一是幻方复杂的数学原理;二是对C+语言的不熟悉。我接触C+语言只有短暂的一学期,对它的了解还是很肤浅的,而且我也是第一次接触课程设计这种作业,这就要求我要花费大量的时间和精力去完成它。幻方制作方法有许多种,选取哪种制作方法才能使它简单而又准确地表示出

10、来?幻方制作不单单是针对某一阶幻方而言;更要求我们寻求一种方法将抽象的理论转化为可操控的现实。1.4需解决的关键技术对奇数阶幻方制作的连续摆数法在C+语言中,要做到对所有情形描述的不重不漏,需要很高思维严密性。而在适用于双偶幻方解法的对称法的程序代码编写时,如何识别课程设计书上所描述的白格子及黄格子,可以通过对数组元素初值来解决。为了解决避免一些不必要的代码重复编写的问题,我们可以使用函数,通过对函数的调用可以很好的解决这一问题。但在一些问题上,函数调用可能会受阻,如本课题中用斯特雷奇法制作单偶数幻方时,在数据传递方面不得不放弃二维数组作为参数的方法,而采用一维数组来代替,这样更增加了对各数组

11、元素下标的深刻认识的重要性,需要保持清醒的头脑。在整个程序代码中,类和对象的思想从始至终,所以我们必须对类和对象的思想有着清晰地认识。2系统分析2.1涉及的基础知识2.1.1头文件一般的输入输出需要包含,当用到setw()时需要包含。2.1.2类与对象类定义的一般格式为:Class 类名 成员表 1;其中,“class类名”称为类头;“”中的部分称为类体,类体中定义了类成员表。成员包括数据成员和函数成员。 通常情况下,在类中只对成员函数做一个声明,而函数定义通常在类定义的外部进行,其格式如下: 返回值类型 类名:函数名(参数表)其中,运算符“:”称为域解析运算符,它指出该函数是属于某个类的成员

12、函数。2.1.3 for( )循环语句for( )循环语句的一般格式为:for(;)S;其中,三个表达式都可以是C+中的任一符合语法规则的表达式;语句S可以是任一C+的语句。同样地将语句S称为for( )的内嵌语句,并把称为循环体。for( )语句的执行过程如下;首先计算“表达式1”(循环初值),且仅计算一次。每一次循环之前计算“表达式2”(循环条件),如果其结果为真,则执行“语句”S,并计算“表达式3”(循环增量)。否则,循环终止。2.1.4数组数组是相同类型的若干个元素所组成的有序集合。数组有一维数组与多维数组之分,在程序中一维数组、二维数组都有使用。数组(array)是一种顺序容器,在

13、C+中多维数组在内存中的排列为按行方式。多维数组的数组名代表数组中第一维(最高维)第一个元素(0号元素)在内存中的首地址。当数组作为函数的参数进行传递时,多维数组同样是将其第一维的第一个元素的首地址传递给函数。多维函数作为参数,最高维可以不写,但最低维必须明确标出,这就限定了二维数组的构造一维数组的定义格式为: 类型说明符 数组名常量表达式1 ; 二维数组的定义格式为: 类型说明符 数组名常量表达式1 常量表达式2;“类型说明符“指定数组元素的类型,“数组名”的命名规则与变量一样,方括号中的“常量表达式1”代表了二维数组的行数,“常量表达式2”代表了二维数组的列数。行列下标都是从零开始,其最大

14、下标均比常量表达式的值小1。2.1.5开关语句开关语句switch语句,它也称为多选择语句。它可以根据给定的条件,从多个分支语句序列中选择执行一个分支的语句序列。switch语句的一般格式为:switch(表达式) case常量表达式1:语句;case常量表达式2:语句; case常量表达式n:语句; default:语句;switch语句的执行过程如下:首先计算“表达式”的值,然后,其结果值依次与每一个常量表达式的值进行匹配。如果匹配成功,则执行该常量表达式后的语句系列。 当遇到break时,则立即结束switch语句的执行,否则,顺序执行到花括号的最后一条语句。default情形是可选的,

15、如果没有常量表达式的值与“表达式”的值匹配,则执行default的语句系列需要注意的是,“表达式”的值的类型必须是字符型或整型。在switch语句中用到了控制执行顺序的语句:break语句。break语句的一般格式: break;该语句只能用于switch语句或循环语句中,其功能是:第一;在switch语句中,结束开关语句的执行,并把控制转移到该开关语句之后的第一条语句,且开始执行该语句。第二;在循环语句中的作用是,跳出循环,并执行循环语句后的第一个语句。2.2解决问题的基本思路及总体方案通过构造函数,即奇数阶幻方制作函数、单偶幻方制作函数、双偶幻方制作函数及主函数。必要时可添加另外的函数。根

16、据输入信息的不同,在主函数中调用不同的函数,输出预期的结果。其中奇数阶幻方采用连续摆数法制作,双偶幻方采用对称法制作,单偶幻方采用斯特雷奇法制作,通过打印函数,将其最后结果显示出来。2.3算法描述及功能模块框图2.3.1奇数阶幻方(连续摆数法)例:一个55 格子,由最上面一行中间一格开始,依次填1,2,3等等。下一个格子填在左上位置。但是要注意两点: 出了幻方的范围,右边接到左边,下边接到上边。 某一格右上已经有了数字,改填在这个格子的下面一格,然后延续前面的方法。17241815235714164613202210121921311182529图2-1所示也不一定按照斜上方写字,可以走马步,

17、或其他方法。下面用的是马步,得到的是泛对角幻方。2.3.2双偶幻方(对称幻方)例:以8阶幻方为例。第一步:在左上44格子中,取一半的格子,要求每行每列都取到2个。 如图2-2中阴影格子所示:图2-2给格子涂上色第二步:按照左右对称、上下对称、中心对称的方法把这8个格子扩充为32个格子。如图2-3中的阴影格子所示: 范区 图2-3对称翻转第三步:从左上角开始,从左到右从上到下,从1开始填数。不过只填没有选中的格子(即没有阴影的格子)。如图2-4所示: 24579111416171922242628293134363739414346484951545658606163图2-4为未上色数赋值第四步

18、:从右下角开始从右到左从下到上再选中的格子里填进刚才没有填的数字。如图2-5所示:64262455975795511535214501617471945442242244026382829353133323430363727392541234321204618484915511312541056858660613631图2-5为上色数赋值2.3.3单偶幻方(斯特雷奇法)例:设阶数n=2(2m+1)=6,m=1。第一步:把方阵分为4个小方阵,位置依次为A左上,B右下,C右上,D左下。 用连续摆数法,把1a2放在A中成第一个幻方;把a212a2放在B中成第二个幻方。把2a213a2放在C中成第三个

19、幻方。把3a214a2放在D中成第四个幻方。 816261924357212325492222720352833171015303234121416313629131822图2-6所示第二步:在A的各行左起取m个方格,但中间一行从第二格开始。与D中相应位置对换。816261924357212325492222720352833171015303234121416313629131822图2-7为上色赋值第三步:在C的各行右起取m1个方格,与B中相应位置对换。此例m-1=0,无需交换。35162619243327212325319222272082833171015305341214164362

20、9131822图2-8所示2.3.4 LUX方法 这是剑桥大学康韦教授发明的方法例:设阶数n=2(2m+1)=10,m=2。第一步:任取一个2m+1 阶幻方,例如5阶幻方。如下。12316421151471811241713922081912653102225图2-9所示第二步:在上面的m+1行 (此处为3行)的每个格子里填入一个字母L;接下去一行填字母U,余下m-1 行填字母X。最后把中间的一个L 与它下面的一个U 交换一下。1L23L16L4L21L15L14L7L18L11L24L17L13U9L2L20U8U19L12U6U5X3X10X22X25X图2-10所示第三步:作一个1010

21、方格,设想为每22为一个单位,每个单位相应于上面一个格子。对应于5阶幻方中数字1的单位填1,2,3,4。对应于5阶幻方中数字2的填5,6,7,8。等等。但是标有字母L 的按照“右上左下右下左上”次序;标有字母U 的按照“左上左下右下右上”次序;标有字母X 的按照“左上右下左下右上”次序。419289646116138481239091626314158283605756532825726944415859545526277071424396936865495236338594956667505134356777802932767345482124787930317475464722231720

22、912374085889710019181110393887869998图2-11所示当然,这个方法也产生很多幻方,并不唯一。3系统设计3.1实现方法3.1.1奇数阶幻方制作(连续摆数法) 建立一个二维数组,以要填的数字为主线,通过控制数组元素下标的变化进行相应操作并控制数组元素的赋值。3.1.2双偶幻方制作(对称法) 建立一个二维数组,将数组元素赋值为“-1”实现图中阴影格子的初值赋值,通过用偶数常数给格子赋值。运用循环结构控制数组元素下标以达目的。3.1.3单偶幻方制作(斯特雷奇法)大致同1)、2)操作相同,其中在制作A、B、C、D幻方时通过调用函数实现,。3.2 流程图3.2.1主函数开

23、始YNY输入nn2= =0n4= =0奇阶幻方双偶幻方单偶幻方输 出结束N 图3-1函数流程图3.2.2奇数阶幻方鉴于单偶幻方制作和双偶幻方制作在算法描述及功能模块框图中已介绍详细,就不给出详细流程图了。4 代码编写与注释#include#include#include#define Max 10int aMaxMax;class HF private: int n; /幻方的阶乘数 int x,y; /数组的下标 int row,col;/数级的下标 int i,j; /循环变量 int di,dx,dy; /单偶数幻方 int oushu; /偶数常数 int temp;public: v

24、oid accept();/接受数据 void jshf(); /奇数幻方 void souhf(); /单偶数幻方 void dsouhf(); /双偶数幻 void operate(); / 运算组合 void display(); /打印 ;void HF:accept() coutn;void HF:jshf() row=0;col=n/2;i=1;arowcol=i;for(i=2;i=n*n;i+)if(i%n=1) row=(row+1)%n; else row=(row-1+n)%n; col=(col+1)%n; arowcol=i;void HF:souhf() /奇数幻方

25、 (2n+1)(连续摆数法) x=n/2,y=0; /X Y表示 数轴(设左上角为(0,0) for (i=1;i=n*n;i+) magicyx =i; /给x*y个格子赋值 if (i%n=0) /右上角有数,放在下面 y+; else if (y=0) /超出上边界 x+,y=n-1; else if (x=n-1) /超出右边界 x=0,y-; else /正常情况 x+,y-; void HF:souhf() /双偶数幻方(对称法) for (x=0;xn/2;x+) /两个for 就提取四分之一的数 (左上角) for (y=0;yn/2;y+) if(x+y)%2=0) /等价于

26、书上涂黄格 做标记 magicxy= -1; magicxn-y-1= -1; magicn-x-1y= -1; magicn-x-1n-y-1= -1; for(x=0;xn;x+) for(y=0;yn;y+) oucs=x*n+y; /oucs为偶数常数 if(magicxy= -1) /给做标记的数赋值 magicxy=n*n-oucs; else magicxy=oucs+1; /给未做标记的数赋值 void HF:dsouhf() /单偶数阶(2(2m+1))幻方(斯特雷奇法) for (di=0;di4;di+) /幻方的分块 switch (di) case 0: /左上的一块

27、 A dx=0,dy=0; break; case 1: /右下的一块 B dx=n/2,dy=n/2; break; case 2: /右上的一块 C dx=n/2,dy=0; break; case 3: /左下的一块 D dx=0;dy=n/2; break; default: break; x=(n/2)/2,y=0; / 1/4 的 第一行中间的数 int nhsq; / 1/2 n的平方 nhsq=(n/2)*(n/2); for (i=1;i=nhsq;i+)/给双偶数幻方赋值 magicy+dyx+dx=i+nhsq*di; if(i % (n / 2) = 0) /右上角有数

28、 y+; else if(y=0) /当超出上面的边界时 x+,y=n/2-1; else if(x = n / 2 - 1) /当超出右面的边界时 x=0,y-; else /正常情况下 x+,y-; int nm; nm=(n / 2 - 1) / 2 ; for (j=1;jnm+1;j+) /交换A和D的第二行起m个数字 J指的是数组的列 temp=magic(n/2)/2j; magic(n/2)/2j=magic(n/2+1)/2+n/2-1j;/把A中的 中间一行,第二个数开始M个数(左上1/4)给D magic(n/2+1)/2+n/2-1j=temp; /把D中间一行,第二个

29、数开始M个数(左下1/4)给A for (i=0;in/2;i+) /交换A和D其它行的数字 if(i=(n/2)/2) /I指的是数组的行 continue; /如果到了中间的数,跳出循环 for(j=0;jnm;j+) temp = magicij; magicij=magicn/2+ij; magicn/2+ij=temp; for (i=0;in-nm;j-) temp=magicij; magicij=magicn/2+ij; magicn/2+ij=temp; void HF:operate() system(cls); cout setw(45) 幻方的制作 endl; cout

30、 setw(45)=endl; cout setw(45) endl; cout setw(49) 1. 奇数阶幻方 endl; cout setw(49) 2. 偶数阶幻方 endl; cout setw(47) 请选择(1或2,0:退出) endl; cout setw(45)=endl; int choice; coutchoice; if(choice=1) accept(); /调用接受的数据 if (n%2=0 |n=0) cout 错误,请输入正奇数: endl; else jshf(); /调用奇数阶乘幻方的计算 display(); /调用显示结果 else if (choi

31、ce = 2) accept(); /调用接受的数据 if(n=2) cout 2 不存在幻方endl; else if(n%2=1 | n=0) cout 错误,请输入正偶数:endl; else if (n%4=0) souhf(); /调用双偶阶乘幻方的计算 display(); /调用显示结果 else dsouhf(); /调用单双偶阶乘幻方的计算 display(); /调用显示结果 else if (choice=0) cout 本次执行终止 ! !endl; else cout 本次执行终止 : 原因 错误的输入 endl;void HF:display() /显示结果 cou

32、tendl; for(i=0;in;i+) for(j=0;jn;j+) coutsetw(4)magicij; coutendlendl; void main() HF hf; char replay; replay=y; while (replay=y) /循环操作 hf.operate(); coutendlendlreplay; coutendlendl; if(replay !=y) return ; 5程序调试在程序调试时往往一下子出现很多错误,查找困难。此次课程设计中,我采用边编写边调试的方法,缩小错误范围。调试过程中,在单偶幻方函数中在a与d进行对应要求交换时,对每一行操作时,

33、m置0的位置有误,导致一些错误。其它就是数组元素下标范围的控制难以掌握,但只要静下心来,还是可以冲破难关的!6运行与测试如以下各图所示为输入相应数字后的运行结果:进入界面,如图6-1所示。图6-1调试结果一奇数阶幻方效果(选取5阶幻方为例)如图6-2所示。图6-2调试结果二单偶幻方效果(选取10阶幻方为例)如图6-3所示。图6-3调试结果三双偶幻方效果(选取8阶幻方为例),与课程设计报告书上有所不同,但所达目的相同,只是其中一种效果。如图6-4所示。图6-4调试结果四退出(如图6-5所示)。图6-5调试结果五 总 结 在短短一个星期的课程设计中,时间太快了,课程设计做得也有点匆忙,相信还有许多

34、可以完善的地方!不过,对我来说,这次课程设计对自身知识的增加及编程能力的提高都有很大的帮助!在这次课程设计我选的课题是幻方。没做课程设计之前,我对幻方的了解几乎是零!看完课程设计书上的概念原理,虽然对幻方。有了些基本的认识,但要是让我自己编写程序代码来完成此次课程设计,那几乎是不可能的事。所以我查阅很多书及网上资料,最后在别人基础上对代码进行修改使之符合本课题要求。这一设计报告,我并不是很满意,鉴于时间的短暂,有许多地方缺少个人特色,有待完美。对于代码的编写,我并没有将课程设计书上提及的方法一一编成,而是选取了其中的一些。其中,奇数阶幻方制作用连续摆数法比较简单,我花了很少时间就搞定。但另外两

35、个幻方的代码就没那么顺利。中间有一段时间还在考虑课程设计究竟写些什么内容,浪费了不少时间,可见预先准备充分还是很必要的。那些没有编成的方法,我觉得还是可操作的,但较之自己选的方法而言,有点繁琐,也许以后闲暇时可以编着试试,或许会有新的发现。有点遗憾的是,我对于那些方法后面的数学原理没有太多的思考,只是表面上按照书上的方法和步骤去实现代码的编写。对于代码的阅读,我觉得只要一一对照课程设计书还是较容易的。我所用的都是一些比较简单的结构,思想以比较简单,很多相似的代码重复编写的次数较多。但是这样有一个好处,就是错误出现较少。通过实践,建立课程设计的整体思想,锻炼了编写程序与调试程序的能力,对文档的编写也有了规范意识。同时对独立学习、吸取他人经验、探索前沿知识的习惯也有了一定的培养!综上所述,此次课程设计还是一次非常有意义的经历!致 谢在这一次的课程设计中,首先要感谢的是淮阴工学院的培养,感谢计算机工程学院提供的实践机会,其次是实验室工作人员提供的舒适的实验环境。最重要的是要感谢指导老师们的辛勤指导,他们为我们付出了自己许多宝贵的休息时间,在我们的整个程设计过程中他们一直在辅导着我们,解决我们所提出的各种古怪的问题,没有他们的辛勤指导,我们不可能顺利完成这次课程设计。还有我们的C+老师在这一学期对我们的谆谆教导、导师对我们的关心与帮助,我都要表示深深地感谢。还要谢谢

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号