《数据结构C语言课程设计大数相乘.docx》由会员分享,可在线阅读,更多相关《数据结构C语言课程设计大数相乘.docx(7页珍藏版)》请在三一办公上搜索。
1、数据结构C语言课程设计大数相乘 目 录 课程设计评语.错误!未定义书签。 目 录 .错误!未定义书签。 1课程论文题目 .2 2程序设计思路 .2 3功能模块图 .错误!未定义书签。 4数据结构设计 .2 5算法设计 .2 6程序代码 .3 7程序运行结果 .7 8编程中遇到的困难及解决方法 .9 9总结心得及良好建议 .9 10致谢.9 1 1课程论文题目 1.两个大数相乘问题 本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。 2程序设计思路 1首先考虑设计将两个大数按照输入顺序存入分别存入数组a ,b 中. 2.把这个数组中的每一位数字单独来进行乘法运算,比如我们可以用一
2、个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,再将每一行数字错位相加。这就是乘法运算的过从低位往高位依次计算,同时确定每一列的项数,确定每一位上的结果存入数组c 中. 3.找到最高位在数组中的项ci,然后依次输出各位上的数值 4.通过主函数来调用其它各个函数。 4数据结构设计 1.输入阶段采用一维数组a ,b 在输入阶段当大数输入时,大数a,b从高位到低位分别依次存入数组a ,b 。 2.调用函数计算阶段采用一维数组c 在调用sum(a,b,m,n)函数中,在计算过程中,由个位到高位依次计算各位的结果,并依次存入数组c 中。 5算法设计 算法设计过程: 2 1.找出每一列
3、的所有项 首先找规律,如下所示 进行乘法a0 a1 a2 b0 b1 b2 b2a0 b2a1 b2a2 b1a0 b1a1 b1a2 b0a0 下标之和 0 b 0a1 b0a2 1 2 3 4 i= 1 i =0(循环时的i的数值) i=4 i=3 i=2 即有 故首先解决了找出每一列所有项的问题。 下标之和=m+n-2-i,由此限定条件可设计循环得出每一列的所有项。 2.计算从低位到高位每一位的值。 显然考虑到进位的问题,故必须从低位到高位依次计算,对于每一列 ,第一项可以除十取余数,保留在原位,存入c ,所得商进位存入mm。然后对于第二列,第一项加进位mm,然后取余数存入su,再加第二
4、项,取余数存入c ,求商存入进位mm,直到该列所有项参与运算到该列结束时,求的最终的c ,和mm. 依次进行后面的运算。 3找出反向存入结果c 中的首项. 因为最高位一定不为零,故可以设计程序从c399开始判断,当ci不等于零时,即为最高项。 4.设计主函数,依次调用如上函数。然后通过for循环设 for(i=0;im+n;i+) su=0; for(j=0;j=n|(tt=(m-1+n-1-i-j)0) continue; else su=su+aj*bm-1+n-1-i-j; 3 6程序代码 #include #include void sum(int a200,int b200,int
5、m,int n)/结果在数组里顺序是反着的 for(i=0;im+n;i+) su=0; for(j=0;j=n|(tt=(m-1+n-1-i-j)=0;i-)/找首位 if(ci!=0) tt=i;break; else continue; for(i=tt;i=0;i-)/输出 printf(%d,ci); printf(n); void main 5 int i,m,n,c; int a200=0,b200=0; printf(请输入第一个数字:n); for(i=0;(c=getchar)!=n;i+) ai=c-48; m=i; printf(n请输入第二个数字:n); for(i=
6、0;(c=getchar)!=n;i+) bi=c-48; n=i;/m,n为数字长度 sum(a,b,m,n); 6 7程序运行结果 7 8 8编程中遇到的困难及解决方法 1.在最初输入大数依次存入数组时,当第一个大数输入完全,输入enter 键时,如何由程序来识别entre键遇到了问题,最后请教同学采用了c=getchar)!=n的方式解决了这个问题,即输入的大数以字符形式录入,此时enter键即为“n”,而存入数组的数字也应通过ai=c-48来进行转化。 2.最初确定每一列的项时想了很久,通过自己在纸上反复的演算,突然找到了之前提到的规律。即每一列的下标之和都相同 9总结心得及良好建议 通过自己亲自编程序,才能够真正理解编程过程中的心酸和喜悦。 10致谢 谢谢武老师一年的辛勤付出和汗水 9 10