本题与火星A+B类似,都是用字符串模拟加法
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
int main() {
string s1, s2;
while (cin >> s1 >> s2) {
// 在高位补0对齐位数
while (s1.size() < s2.size()) {
s1.insert(0, 1, '0');
}
while (s1.size() > s2.size()) {
s2.insert(0, 1, '0');
}
vector<int> ans;
bool carry = false;
// 从低位开始十进制加法
for (int i = s1.size() - 1, j = s2.size() - 1; i >= 0 && j >= 0; --i, --j) {
int sum = s1[i] - '0' + s2[j] - '0';
if (carry) sum += 1;
if (sum >= 10) {
ans.push_back(sum - 10);
carry = true;
continue;
}
ans.push_back(sum);
carry = false;
}
// 如果最高位仍有进位,加到结果中
if (carry) ans.push_back(1);
// 输出结果
for (auto it = ans.rbegin(); it != ans.rend(); it++) {
cout << *it;
}
cout << endl;
}
return 0;
}

京公网安备 11010502036488号