10:大整数加法
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
求两个不超过200位的非负整数的和。
输入
- 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 输出
- 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入
-
22222222222222222222 33333333333333333333
样例输出
-
55555555555555555555
来源
- 程序设计实习2007
-
//noi_1982 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<iomanip> using namespace std; int c[205]={0},d[205]={0}; void initial(int a[]){ string s; cin>>s; a[0]=s.length(); for(int i=1;i<=a[0];i++){ a[i]=s[a[0]-i]-'0'; } for(int i=a[0];i>=1;i--){ if(a[i]==0) a[0]--; else break; } } void printa(int a[]){ if(a[0]==0) { cout<<0; return; } for(int i=1;i<=a[0];i++){ cout<<a[a[0]+1-i]; } // cout<<endl; } void plusa(int a[],int b[]){ if(b[0]>a[0]) a[0]=b[0]; for(int i=1;i<=a[0];i++){ a[i]=a[i]+b[i]; a[i+1]+=a[i]/10; a[i]%=10; } if(a[a[0]+1]) a[0]++; } int main(){ initial(c); initial(d); plusa(c,d); printa(c); return 0; }
要考虑结果为零的情况,还有要去除前导零。