【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555
算法核心:
c[i]+=a[i]+b[i];
if(c[i]>=10){
++c[i+1];
c[i]%=10;
}
总代码:
#include<bits/stdc++.h>
using namespace std;
char s1[205],s2[205];
int a[205],b[205],c[220];
int main(){
int lena,lenb,lenc;
scanf("%s",s1);
scanf("%s",s2);
lena=strlen(s1);
lenb=strlen(s2);
lenc=max(lena,lenb) + 1; //如果s1和s2的最高位相加大于十,长度就不够用了,所以要加上1
memset(c,0,sizeof(c)); //可以不写
for(int i=0;i<lena;i++){ //倒序放入数组,字符减'0' ,便等整型
a[lena-i]=s1[i]-'0';
}
for(int i=0;i<lenb;i++){
b[lenb-i]=s2[i]-'0';
}
for(int i=1;i<=lenc;i++){
c[i]+=a[i]+b[i]; //算法核心
if(c[i]>=10){
++c[i+1];
c[i]%=10;
}
}
while(c[lenc]==0 && lenc>1) lenc--; //删除前导零
for(int i=lenc;i>0;i--){
cout<<c[i];
}
return 0;
}