您当前的位置: 首页 > 

《信息学奥赛一本通》 高精度加法。输入两个正整数,求它们的和。

发布时间:2019-01-25 11:41:42 ,浏览量:0

高精度加法。输入两个正整数,求它们的和。
  • 算法分析
    • 升级版代码
算法分析

输入两个数到两个变量中,然后用赋值语句求它们的和,输出。但是,我们知道,在C++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,上述算法显然不能求出精确解,因此我们需要寻求另外一种方法。在读小学时,我们做加法都采用竖式方法,这样我们方便写出两个整数相加的算法。 an……a3 a2 a1 bn……b3 b2 b1 +———————— cn……c3 c2 c1 我们用数组a、b分别存储加数和被加数,用数组c存储结果。

代码如下:

#include  #include  #include  using namespace std; int main () { char a1[100],b1[100]; int a[100],b[100],c[100],lena,lenb,lenc,i,x; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); gets(a1); gets(b1); //输入加数和被加数 lena=strlen(a1); lenb=strlen(b1); for(i=0;i<=lena-1;i++) {//把加数放入a数组 a[lena-i]=a1[i]-48; //思考:为什么要-48? } for(i=0;i<=lenb-1;i++) {//把加数放入b数组 b[lenb-i]=b1[i]-48; //思考:为什么要-48? } lenc=1;x=0; 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--) {//输出结果 cout<<c[i]; } cout<<endl; return 0; } 
升级版代码
#include  #include  #include  using namespace std; int main () { string a1,b1; bool temp=true; int a[100],b[100],c[100],lenc=1,x=0; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>a1>>b1; for(int i=0;i<=a1.length()-1;i++) a[a1.length()-i]=a1[i]-'0'; for(int i=0;i<=b1.length()-1;i++) b[b1.length()-i]=b1[i]-'0'; while(lenc<=a1.length()||lenc<=b1.length()) { c[lenc]=a[lenc]+b[lenc]+x; x=c[lenc]/10; c[lenc]%=10; lenc++; } c[lenc]=x; for(int i=lenc;i>=1;i--) { if(c[i]==0&&temp) continue; else temp=false; cout<<c[i]; } if(c[1]==0) cout<<0<<endl; cout<<endl; return 0; } 
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109966博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.2687s