描述
给定两个整数A和B,输出A+B的值。A和B的值可能会很大很大,甚至达到100位。现在请你解决这一问题。
输入
两行,分别是两个整数A,B,换行隔开。A和B会很大很大。
输出
一个整数,即A+B的值
输入样例 1
22222222222222222222
33333333333333333333
输出样例 1
55555555555555555555
这道题是高精度计算,也是小白通向大神之路上的必做题。难度相对较难,需要对字符串和数组十分熟练。
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int a[2000],b[2000],c[2000]; 6 char al[2000],bl[2000]; 7 int main() 8 { 9 int la,lb,lc,x=0; 10 gets(al);gets(bl); //读入字符串a1,b1 11 la=strlen(al);lb=strlen(bl); //1a,1b分别存在字符串a1,b1长度 12 for(int i=0;i<=la-1;i++) a[la-i]=al[i]-48; 13 for(int i=0;i<=lb-1;i++) b[lb-i]=bl[i]-48; //将两个字符串分别转存到整形一维数组中 14 lc=1; 15 while(lc<=la||lc<=lb) //判断两个大整数是否都还没有算完 16 { 17 c[lc]=a[lc]+b[lc]+x; //X表示前一次的进位 18 x=c[lc]/10; //判断是否进一 19 c[lc]%=10; //求相加后的数的个位 20 lc++; //计算下一位数 21 } 22 c[lc]=x; 23 while(c[lc]==0&&lc>1) lc--; //去掉多余的0 24 for(int i=lc;i>=1;i--) cout<<c[i]; 25 return 0; 26 }