本题与火星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; }