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;
}