第1章高精度计算(C++版)试题.ppt

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一章 高精度计算 利用计算机进行数值计算,有时会遇到这样的问题:有些计算要求精度高,希望计算的数的位数可达几十位甚至几百位,虽然计算机的计算精度也算较高了,但因受到硬件的限制,往往达不到实际问题所要求的精度。我们可以利用程序设计的方法去实现这样的高精度计算。介绍常用的几种高精度计算的方法。 高精度计算中需要处理好以下几个问题: (1)数据的接收方法和存贮方法 数据的接收和存贮:当输入的数很长时,可采用字符串方式输入,这样可输入数字很长的数,利用字符串函数和操作运算,将每一位数取出,存入数组中。另一种方法是直接用循环加数组方法输入数据。 void init(int a[]) //传入一个数组 { string s; cins; //读入字符串s a[0]=s.length(); //用a[0]计算字符串s的位数 for(i=1;i=a[0];i++) a[i]=s[a[0]-i]-0; //将数串s转换为数组a,并倒序存储 }另一种方法是直接用循环加数组方法输入数据。 while (lenc =lena||lenc =lenb) {    c[lenc]=a[lenc]+b[lenc]+x; //两数相加    x=c[lenc]/10;    c[lenc]%=10; lenc++; } c[lenc]=x; if (c[lenc]==0) lenc--; //处理最高进位 for (i=lenc;i=1;i--) coutc[i]; //输出结果 coutendl; return 0; } i=1; while (i=lena||i=lenb) { if (a[i]b[i]) { a[i]+=10; //不够减,那么向高位借1当10 a[i+1]--; } c[i]=a[i]-b[i]; //对应位相减 i++; } lenc=i; while ((c[lenc]==0)(lenc1)) lenc--; //最高位的0不输出   for (i=lenc;i=1;i--) coutc[i]; //输出结果 coutendl; return 0; } for (i=1;i=lena;i++) { x=0; //用于存放进位 for (j=1;j=lenb;j++) //对乘数的每一位进行处理 { c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; //当前乘积+上次乘积进位+原数 x=c[i+j-1]/10; c[i+j-1] %= 10; } c[i+lenb]=x; //进位 } lenc=lena+lenb; while (c[lenc]==0lenc1) //删除前导0 lenc--; for (i=lenc;i=1;i--) coutc[i]; coutendl; return 0; } for (i=1;i=lena;i++) //按位相除 { c[i]=(x*10+a[i])/b; x=(x*10+a[i])%b; }   lenc=1; while (c[lenc]==0lenclena)   lenc++; //删除前导0 for (i=lenc;i=lena;i++) coutc[i]; couten

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档