https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
#include <iostream>
#include <algorithm>
using namespace std;
string solve(string s, string t) {
if (s.empty() && t.empty())
return 0;
if (s.empty())
return t;
if (t.empty())
return s;
int num1, num2, sum, carry = 0;
string ans;
// 默认s的位数较多
if (s.size() < t.size())
swap(s, t);
// 从两个数的最后一位开始
int i = s.size() - 1, j = t.size() - 1;
for (; i >= 0 && j >= 0; --i, --j) {
num1 = s[i] - '0'; // 将数字字符转为整数
num2 = t[j] - '0';
sum = num1 + num2 + carry; // 对应位求和
carry = sum > 9 ? 1 : 0; // 进位
ans += (sum % 10) + '0'; // 存入结果
}
// 存在剩余位数和进位
while (i >= 0 || carry) {
// 存在剩余位数,当前位等于s[i]+carry,不存在剩余位数,当前位等于carry
sum = (i >= 0) ? (s[i] - '0' + carry) : carry;
carry = sum > 9 ? 1 : 0; // 新的进位
ans += (sum % 10) + '0'; // 存入结果
i--;
}
// 反转结果字符串
reverse(ans.begin(), ans.end());
return ans;
}
int main() {
std::cout << solve("1", "99") << std::endl;
std::cout << solve("12345", "99") << std::endl;
std::cout << solve("114514", "") << std::endl;
return 0;
}