数据结构C语言课程设计大数相乘_第1页
数据结构C语言课程设计大数相乘_第2页
数据结构C语言课程设计大数相乘_第3页
数据结构C语言课程设计大数相乘_第4页
数据结构C语言课程设计大数相乘_第5页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设at评语错误!未定义书签。目录错误!未定义书签。1 .课程论文题目22 .程序设计思路23 .功能模块图错误!未定义书签。4 .数据结构设计25 .算法设计26 .程序代码37 .程序运行结果78 .编程中遇到的困难及解决方法99 .总结心得及良好建议910 .致谢91.课程论文题目1 .两个大数相乘问题【要求】本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。2 .程序设计思路1首先考虑设计将两个大数按照输入顺序存入分别存入数组a,b中.2 .把这个数组中的每一位数字单独来进行乘法运算,比如我们可以用一个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,

2、再将每一行数字错位相加。这就是乘法运算的过从低位往高位依次计算,同时确定每一列的项数,确定每一位上的结果存入数组c中.3 .找到最高位在数组中的项ci,然后依次输出各位上的数值4 .通过主函数来调用其它各个函数。5 .数据结构设计1 .输入阶段采用一维数组a,b在输入阶段当大数输入时,大数a,b从高位到低位分别依次存入数组a,b。2 .调用函数计算阶段采用一维数组c在调用sum(a,b,m,n)函数中,在计算过程中,由个位到高位依次计算各位的结果,并依次存入数组c中。5.算法设计算法设计过程:1.找出每一列的所有项首先找规律,如下所示进行乘法a0a1a2b0b1b2b0a0b1a0b0a1b2

3、a0b1a1b0a2b2a1b1a2b2a2下标之和01234i=0(循环时的i的数值)i=4i=3i=2i=1即有下标之和=m+n-2-i,由此限定条件可设计循环得出每一列的所有项。故首先解决了找出每一列所有项的问题。2.计算从低位到高位每一位的值。显然考虑到进位的问题,故必须从低位到高位依次计算,对于每一列,第一项可以除十取余数,保留在原位,存入c,所得商进位存入mm。然后对于第二列,第一项加进位mm,然后取余数存入su,再加第二项,取余数存入c,求商存入进位mm,直到该列所有项参与运算到该列结束时,求的最终的c和mm.依次进行后面的运算。3找出反向存入结果c中的首项.因为最高位一定不为零

4、,故可以设计程序从c399开始判断,当ci不等于零时,即为最高项。4.设计主函数,依次调用如上函数。然后通过for循环设for(i=0;i<m+n;i+)su=0;for(j=0;j<m;j+)if(tt=(m-1+n-1-i-j)>=n|(tt=(m-1+n-1-i-j)<0)continue;elsesu=su+aj*bm-1+n-1-i-j;#include<stdio.h>#include<math.h>voidsum(inta200,intb200,intm,intn)/结果在数组里顺序是反着的(intmm=0;/保存进位intc400

5、=0;/保存结果inti,j,su,tt;for(i=0;i<m+n;i+)su=0;for(j=0;j<m;j+)if(tt=(m-1+n-1-i-j)>=n|(tt=(m-1+n-1-i-j)<0)continue;elsesu=su+aj*bm-1+n-1-i-j;su=su+mm;ci=su%10;mm=su/10;printf("n结果是:n");for(i=399;i>=0;i-)/找首位if(ci!=0)tt=i;break;elsecontinue;for(i=tt;i>=0;i-)/输出printf("%d&q

6、uot;,ci);printf("n");voidmain()inti,m,n,c;inta200=0,b200=0;printf("请输入第一个数字:n");for(i=0;(c=getchar()!='n'i+)ai=c-48;m=i;printf("n请输入第二个数字:n");for(i=0;(c=getchar()!='n'i+)bi=c-48;n=i;/m,n为数字长度sum(a,b,m,n);*'C:U5erthnlcpach.DesttoH,£数,无数.口f口ugl.exe1请谕入第一个数字:45678请输入第二个数字:"C;UsersthnkpadDesttopVdSX3StDebugl.exe,情输入第一个数字;请输入第二个数字:6789333.编程中遇到的困难及解决方法1 .在最初输入大数依次存入数组时,当第一个大数输入完全,输入enter键时,如何由程序来识别entre键遇到了问题,最后请教同学采用了c=getchar()!='n'的方式解决了这个问题,即输入的大数以字符形式录入,此时enter键即为“n”,而存入数组的数字也应通过ai=c-48来进行转化。2 .最初确定每一列的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论