题目描述
求两个不超过200位的非负整数的和。
输入:
两行,每行是一个不超过200位的非负整数,可能右多余的前导0。
输出:
一行,也就是相加后的结果。结果里不能有多余的前导0,也就是说,如果结果是342,那么就不能输出为0342。
输入数据:
222222222222222222222222222222
333333333333333333333333333333
输出数据:
555555555555555555555555555555
#include <bits/stdc++.h>
using namespace std;
#define maxn 250
char sa[maxn],sb[maxn];
int a[maxn],b[maxn],c[maxn];
int main(){
scanf("%s",sa);
int la = strlen(sa); //strlen()不会统计'0'
for(int i=0;i<la;i++) { //当i:0时 假设la:10
//假设sa:'1','3','4','5','6','7','8','9','0'
// sa[0]-'0'=1, s[9]-'0'=0
// a[9] = sa[0]-'0', a[9]:1 a[0] =s[9]-'0',a[0]:0
// a[]={0,9,8,7,6,5,4,3,2,1}
// 这样sa倒序存进了a
a[la - i - 1] = sa[i] - '0';
}
scanf("%s",sb);
int lb = strlen(sb);
for(int i=0;i<lb;i++) {
b[lb - i - 1] = sb[i] - '0';
} // 这样sb倒序存进了b
int lc = la > lb ? la : lb; //求出la和lb中谁比较大
memset(c,0,sizeof(c));
for(int i=0;i<lc;i++) {
c[i] += a[i] + b[i];
c[i+1] = c[i]/10;
c[i] = c[i]%10;
}
if( c[lc]>0 ) lc++;
for(int i=lc - 1;i>=0; i--){
printf("%d",c[i]);
}
cout << endl;
return 0;
}