1168:大整数加法
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555
【来源】
No
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
char ach[201],bch[201];
int a[201],b[201],c[205],lena,lenb,lenc,i,j,jw;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
//以字符串型读入数据
scanf("%s",ach);
scanf("%s",bch);
//获取字符串长度
lena=strlen(ach),lenb=strlen(bch);
//反转字符串取得整型数组
for(i=lena-1,j=1;i>=0;i--,j++) a[j]=ach[i]-'0';
for(i=lenb-1,j=1;i>=0;i--,j++) b[j]=bch[i]-'0';
//对位相加
jw=0;
lenc=1;
while(lenc<=lena||lenc<=lenb){
c[lenc]=a[lenc]+b[lenc]+jw;
jw=c[lenc]/10;
c[lenc]%=10;
lenc++;
}
c[lenc]=jw;
while(c[lenc]==0) lenc--;//获取数组长度
for(i=lenc;i>0;i--) printf("%d",c[i]);//逆序输出
return 0;
}