高精度加法
题目描述
请你用高精度算法求两个非负数a、b的和,这两个数的最长位数为400位。
输入
输入有多组测试数据,每组数据占一行,分别表示加数a和被加数b,a,b间用空格格开。a,b均为非负数。 输入以EOF结束。
输出
输出对应每行输入,输出对应的a,b值的和。
样例输入
99999999999999999999999999 99999999999999999999999999999999
999999999999999999999999999 1
999999999999999999999999999 8888888888888888888888888888888888
样例输出
100000099999999999999999999999998
1000000000000000000000000000
8888889888888888888888888888888887
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include<iostream> #include<cstdio> #include<cstring> using namespace std; char a1[500],b1[500]; int a[500],b[500],c[500]; int la,lb,lc; int main() { while(scanf("%s%s",a1,b1)!=EOF) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); la=strlen(a1);lb=strlen(b1); for(int i=0;i<la;i++)a[la-i-1]=a1[i]-'0'; for(int i=0;i<lb;i++)b[lb-i-1]=b1[i]-'0'; lc=max(la,lb); for(int i=0;i<lc;i++) c[i]=a[i]+b[i]; for(int i=0;i<lc;i++) {c[i+1]+=c[i]/10;c[i]%=10;} if(c[lc]>0)lc++; for(int i=lc-1;i>=0;i--) printf("%d",c[i]); printf("\n"); } return 0; } |
Subscribe