描述
求两个不超过200位的非负整数的和。
输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222 33333333333333333333
样例输出
55555555555555555555
提示:
大整数加法也就是高精度加法
参考程序如下:
#include<bits/stdc++.h> using namespace std; char sa[1010],sb[1010]; int la,lb,lc,a[1010],b[1010],c[1010]; int n=0; int main(){ scanf("%s",sa); scanf("%s",sb); la=strlen(sa); lb=strlen(sb); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(int i=0;i<la;i++){ a[la-i-1]=sa[i]-'0'; } for(int i=0;i<lb;i++){ b[lb-i-1]=sb[i]-'0'; } lc=la>lb?la:lb; memset(c,0,sizeof(c)); for(int i=0;i<lc;i++){ c[i]=a[i]+b[i]+c[i]; if(c[i]>=10){ c[i+1]=1; c[i]-=10; } } if(c[lc]>0){ lc++; } for(int i=lc-1;i>=0;i--){ if(c[i]==0){ n++; } } if(n==lc){ cout<<"0"; }else{ bool flag=true; for(int i=lc-1;i>=0;i--){ if(c[i]==0&&flag){ continue; }else{ flag=false; } printf("%d",c[i]); } } }