网站大量收购闲置独家精品文档,联系QQ:2885784924

数据结构课程设计大数相乘与多项式相乘.docVIP

数据结构课程设计大数相乘与多项式相乘.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目录 问题描述………………………………………………… 设计思路………………………………………………… 数据结构设计…………………………………………… 功能函数设计…………………………………………… 程序代码………………………………………………… 运行与测试……………………………………………… 设计心得………………………………………………… 一、大数相乘 1、问题描述: 1输入两个相对较大的正整数,能够通过程序计算出其结果 2、设计思路: 1首先考虑设计将两个大数按照输入顺序存入分别存入数a[ ],b[ ]中. 2把这个数组中的每一位数字单独来进行乘法运算,比如我们可以用一个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,再将每一行数字错位相加。这就是乘法运算的过从低位往高位依次计算,同时确定每一列的项数,确定每一位上的结果存入数组c[ ]中. 3找到最高位在数组中的项c[i],然后依次输出各位上的数值 4通过主函数来调用其它各个函数。 3、数据结构设计: 1输入阶段采用一维数组a[ ],b[ ]在输入阶段当大数输入时, 大数a,b从高位到低位分别依次存入数组a[ ],b[ ]。 2调用函数计算阶段采用一维数组c[ ]在调用sum(a,b,m,n)函数中,在计算过程中,由个位到高位依次计算各位的结果,并依次存入数组c[ ]中。 4、功能函数设计: 1找出每一列的所有项 首先找规律,如下所示 进行乘法: a[0] a[1] a[2] b[0] b[1] b[2] b[2]a[0] b[2]a[1] b[2]a[2] b[1]a[0] b[1]a[1] b[1]a[2] b[0]a[0] b[0]a[1] b[0]a[2] 下标之和 0 1 2 3 4 i=4 i=3 i=2 i=1 i =0(循环时的i的数值) 即有 下标之和=m+n-2-i,由此限定条件可设计循环得出每一列的所有项。 故首先解决了找出每一列所有项的问题。 2计算从低位到高位每一位的值。 显然考虑到进位的问题,故必须从低位到高位依次计算,对于每一列 ,第一项可以除十取余数,保留在原位,存入c[ ] ,所得商进位存入mm。然后对于第二列,第一项加进位mm,然后取余数存入su,再加第二项,取余数存入c[ ],求商存入进位mm,直到该列所有项参与运算到该列结束时,求的最终的c[ ],和mm. 依次进行后面的运算。 3找出反向存入结果c[ ]中的首项. 因为最高位一定不为零,故可以设计程序从c[399]开始判断,当c[i]不等于零时,即为最高项。 4设计主函数,依次调用如上函数。然后通过for循环 5、程序代码: #include stdio.h #include math.h void sum(int a[200],int b[200],int m,int n)//结果在数组里顺序是反着的 { int mm=0;//保存进位 int c[400]={0};//保存结果 int i,j,su,tt; for(i=0;im+n;i++) { su=0; for(j=0;jm;j++) { if((tt=(m-1+n-1-i-j))=n||(tt=(m-1+n-1-i-j))0) continue; else su=su+a[j]*b[m-1+n-1-i-j]; } su=su+mm; c[i]=su%10; mm=su/10; } printf(\n***************************\n); printf(结果是:\n); for(i=399;i=0;i--)//找首位 { if(c[i]!=0) { tt=i;break; } else continue; } for(i=tt;i=0;i--)//输出 printf(%d,c[i]); printf(\n); } void main() { int i,m,n,c; int a[200]={0},b[200]={0}; printf(***************************\n); printf(请输入第一个数字:\n); for(i=0;(c=getchar())!=\n;i++) a[i]=c-48; m=i; printf(\n***************************\n); printf(请输入第二个数字:\n); for(i=0;(c=

文档评论(0)

celkhn0303 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档