题目描述
实现一个加法器,使其能够输出a+b的值。
输入描述:
输入包括两个数a和b,其中a和b的位数不超过1000位。输出描述:
可能有多组测试数据,对于每组数据, 输出a+b的值。示例1
输入
2 6 10000000000000000000 10000000000000000000000000000000
输出
8 10000000000010000000000000000000
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char a[1001], b[1001];
while(cin >> a >> b){
int sa=strlen(a);
int sb=strlen(b);
if(sa>sb){
int carry=0;
for(int i=sa-1;i>=sa-sb;i--){
char aa=a[i];
a[i] = (a[i]+b[i-(sa-sb)]-'0'-'0'+carry)%10+'0';
carry = (aa+b[i-(sa-sb)]-'0'-'0'+carry)/10;
}
for(int i=sa-sb-1;i>=0;i--){
char aa=a[i];
a[i] = (a[i]-'0'+carry)%10+'0';
carry = (aa-'0'+carry)/10;
}
if(carry!=0) cout<<carry;
cout<<a<<endl;
}
else if(sa==sb){
int carry=0;
for(int i=sa-1;i>=0;i--){
char aa=a[i];
a[i] = (a[i]+b[i]-'0'-'0'+carry)%10+'0';
carry = (aa+b[i]-'0'-'0'+carry)/10;
}
if(carry!=0) cout<<carry;
cout<<a<<endl;
}
else if(sa<sb){
int carry=0;
for(int i=sb-1;i>=sb-sa;i--){
char bb=b[i];
b[i] = (b[i]+a[i-(sb-sa)]-'0'-'0'+carry)%10+'0';
carry = (bb+a[i-(sb-sa)]-'0'-'0'+carry)/10;
}
for(int i=sb-sa-1;i>=0;i--){
char bb=b[i];
b[i] = (b[i]-'0'+carry)%10+'0';
carry = (bb-'0'+carry)/10;
}
if(carry!=0) cout<<carry;
cout<<b<<endl;
}
}
return 0;
}