2157: 大整数加法
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:9
解决:5
题目描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入 复制
22222222222222222222
33333333333333333333
样例输出 复制
55555555555555555555
提示
#include<bits/stdc++.h>
using namespace std;
#define maxn 520
int a[maxn],b[maxn],c[maxn];
int main(){
string A,B;
cin>>A>>B;
int lena,lenb,len;
lena=A.length();
lenb=B.length();
len=max(lena,lenb);
for (int i=A.length()-1;i>=0;i--)
a[lena-i]=A[i]-'0';
for (int i=B.length()-1;i>=0;i--)
b[lenb-i]=B[i]-'0';
for (int i=1;i<=len;i++) {
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10; //模拟进位
c[i]=c[i]%10;
}
if (c[len+1]>0) len++; //最后进位可能会导致位数增加
for (int i=len;i>=1;i--)
cout<<c[i];
return 0;
}