10:大整数加法
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
求两个不超过200位的非负整数的和。
- 输入
- 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
- 输出
- 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
- 样例输入
-
22222222222222222222 33333333333333333333
- 样例输出
-
55555555555555555555
这道题目看似简单,实际上比较复杂,这个时候,我们可以用高精度来解决这道题。
废话不多说了,来看代码:#include<bits/stdc++.h> using namespace std; void Add(char s1[],char s2[]) { int num1[1005]={0},num2[1005]={0},sum[1008]={0}; int i,j=0,k=0,len1,len2; len1=strlen(s1); len2=strlen(s2); for(i=len1-1;i>=0;i--) num1[j++]=s1[i]-'0'; for(i=len2-1;i>=0;i--) num2[k++]=s2[i]-'0'; for(i=0;i<=1005;i++) { sum[i]=num1[i]+num2[i]+sum[i]; if(sum[i]>=10) { sum[i+1]++; sum[i]=sum[i]%10; } } for(i=1004;;i--) { if(sum[i]!=0) { k=i; break; } } for(i=k;i>=0;i--) cout<<sum[i]; cout<<endl; } int main() { char a[1005],b[1005]; scanf("%s %s",a,b); if(a[0]=='0'&&b[0]=='0') cout<<0<<endl; else Add(a,b); return 0; }这里要注意的是,再去除前导0的时候,不要把问题变得复杂。
浙公网安备 33010602011771号