高精度加法
【题目描述】 求两个不超过200位的非负整数的和。 【输入】 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 【输出】 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 【输入样例】 22222222222222222222 33333333333333333333 【输出样例】 55555555555555555555
#include<iostream> #include<cstring> #include<string> using namespace std; char s1[210],s2[210]; int a[210],b[210],c[210]; int main() { cin>>s1; cin>>s2; int i,j,lena,lenb,lenc,max,x; lena=strlen(s1); lenb=strlen(s2); for(i=0;i<=lena;i++) //逆序存储于数组中 a[lena-i]=s1[i]-'0'; for(i=0;i<=lenb;i++) b[lenb-i]=s2[i]-'0'; x=0; //x用来进位 lenc=1; while( (lenc<=lena) || (lenc<=lenb) ) { c[lenc]=a[lenc]+b[lenc]+x; x=c[lenc]/10; c[lenc]=c[lenc]%10; lenc++; } c[lenc]=x; //最后这个位也要进,别忘了 while(c[lenc]==0) //删除前导零 lenc--; for(i=lenc;i>0;i--) //逆序输出数组c cout<<c[i]; cout<<endl; return 0; }
注意题目条件!输入可能会有前导零!