求两个不超过 200200 位的非负整数的和。
输入格式
有两行,每行是一个不超过 200200 位的非负整数,可能有多余的前导 00。
输出格式
一行,即相加后的结果。结果里不能有多余的前导 00,即如果结果是 342342,那么就不能输出为 03420342。
输出时每行末尾的多余空格,不影响答案正确性
样例输入复制
22222222222222222222
33333333333333333333
样例输出复制
55555555555555555555
用一个结构体表示这个大数,结构体里面包含数组和大数的长度即可,最后模拟即可。
//@author:hairu,wu
//@from:ahut
#include<iostream>
#include<memory.h>
using namespace std;
const int max_n=300;
struct bign{
int a[max_n];
int size;
bign(){
memset(a,0,sizeof(a));
size=0;
}
};
bign fun1(string str){
//将str转为bign
bign ans;
int len=str.length();
for(int i=len-1;i>=0;i--){
ans.a[ans.size++]=str[i]-'0';
}
return ans;
}
bign Add(bign x,bign y){
bign ans;
int r=0;
int len1=x.size,len2=y.size;
int i=0;
for(i=0;i<len1 && i<len2;i++){
int tmp=x.a[i]+y.a[i]+r;
ans.a[ans.size++]=tmp%10;
r=tmp/10;
}
while(i<len1){
int tmp=x.a[i++]+r;
ans.a[ans.size++]=tmp%10;
r=tmp/10;
}
while(i<len2){
int tmp=y.a[i++]+r;
ans.a[ans.size++]=tmp%10;
r=tmp/10;
}
if(r!=0){
ans.a[ans.size++]=r;
}
return ans;
}
void print(bign ans){
int j=ans.size-1;
while(ans.a[j]==0 && j>0){
j--;
}
while(j>=0){
cout<<ans.a[j--];
}
cout<<endl;
}
int main(){
string str1,str2;
cin >> str1 >> str2;
bign num1=fun1(str1);
bign num2=fun1(str2);
bign num3=Add(num1,num2);
print(num3);
return 0;
}