简单高精度加法
Posted diliiiii
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单高精度加法相关的知识,希望对你有一定的参考价值。
【高精度】简单高精度加
题目描述
修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数A、B的和,其中A和B的位数在5000位以内。
输入
共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在5000以内。
输出
输出一个非负数,即两数之和。
样例输入
1111111111
2222222222
样例输出
3333333333
#include <bits/stdc++.h> #define N 5000 #define ZEROCHAR -48 int maxleng(int a,int b) { return a>b?a:b; } int transnumber(char c) { return c-‘0‘; } int main() { char a[N+5],b[N+5]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); scanf("%s %s",a,b); int len1=strlen(a); int len2=strlen(b); int i; for(i=0;i<(len1+1)/2;++i) { if(i==len1-1-i) break; a[i]=a[i]+a[len1-1-i]; a[len1-1-i]=a[i]-a[len1-1-i]; a[i]=a[i]-a[len1-1-i]; } for(i=0;i<(len2+1)/2;++i) { if(i==len2-1-i) break; b[i]=b[i]+b[len2-1-i]; b[len2-1-i]=b[i]-b[len2-1-i]; b[i]=b[i]-b[len2-1-i]; } int leng=maxleng(len1,len2); int c,psum,sum[N+5],an,bn; for(i=0,c=0,psum=0;i<=leng;++i) { an=transnumber(a[i]); bn=transnumber(b[i]); if(an==ZEROCHAR) an=0; if(bn==ZEROCHAR) bn=0; psum=an+bn+c; sum[i]=psum%10; c=psum/10; } int sumleng=(sum[leng]>0?leng+1:leng); for(i=sumleng-1;i>=0;--i) { printf("%d",sum[i]); } printf(" "); return 0; }
以上是关于简单高精度加法的主要内容,如果未能解决你的问题,请参考以下文章