P1601 高精度加法(洛谷题面

题目

题目描述:

给定两个非负整数 a,ba,b,求它们的和。不用考虑负数

输入格式:

输入共两行,每行一个非负整数,分别为 a,ba,b

输出格式:

输出一行一个非负整数,表示 a+ba+b 的值。

数据范围与说明:

对于 20%20\% 的测试数据,a,b109a,b \le 10^9
对于 40%40\% 的测试数据,a,b1018a,b \le 10^{18}
对于 100%100\% 的测试数据,0a,b105000\le a,b \le 10^{500}

输入输出样例 #1

输入:

1
2
1
1

输出:

1
2

输入输出样例 #2

输入:

1
2
1001
9099

输出:

1
10100

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<bits/stdc++.h>
using namespace std;
string a,b,result="";
string add(string a,string b){
if(a.size()<b.size()){
swap(a,b);
}
int len_a=a.size();
int len_b=b.size();
int diff=len_a-len_b;
int carry=0;
for(int i=a.size()-1;i>=0;i--){
int digit1=a[i]-'0';
int digit2=(i>=diff)?(b[i-diff]-'0'):0;
int sum=digit1+digit2+carry;
carry=sum/10;
result.push_back(sum%10+'0');
}
if(carry){
result.push_back(carry+'0');
}
reverse(result.begin(),result.end());
return result;
}
int main(){
cin>>a;
cin>>b;
string num=add(a,b);
cout<<num;
return 0;
}