起因:
照理说,A+B问题地狱版的风波应该结束了(详细看《A+B问题终结版》),可我还是放不下A+B问题地狱版。
于是我又花了两天半,成功做出了A+B问题地狱版。
这下我真的心满意足了。
A+B问题地狱版:
描述
小贝正在思考一道数学题:输入两个数字a和b,求a+b的和。
你能帮帮她吗?
输入
包括两个数字a和b,数字之间用空格分隔。
输出
只有一行,即a+b的和。
输入样例#1
1 2
输出样例#1
3
提示:
数据范围:
40%的数据,0<a,b<32767;
60%的数据,0<a,b<10^10;
80%的数据,0<a,b<10^20;
100%的数据,-10^30<a,b<10^30,且a*b>=0,其中一个数据a<0,b<0。
代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string add(string s1, string s2) {
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
string res;
int carry = 0;
for (int i = 0; i < max(s1.size(), s2.size()); ++i) {
int num1 = i < s1.size() ? s1[i] – '0' : 0;
int num2 = i < s2.size() ? s2[i] – '0' : 0;
int sum = num1 + num2 + carry;
res.push_back(sum % 10 + '0');
carry = sum / 10;
}
if (carry) {
res.push_back(carry + '0');
}
reverse(res.begin(), res.end());
return res;
}
int main() {
string a, b;
cin >> a >> b;
bool isNegative = false;
if (a[0] == '-' && b[0] == '-') {
isNegative = true;
a = a.substr(1);
b = b.substr(1);
}
string sum = add(a, b);
if (isNegative) {
cout << "-" << sum << endl;
} else {
cout << sum << endl;
}
return 0;
}

