兩個不超過 10000 位的非負整數相加,多測試案例。輸出格式:Case k: a + b = sum。
從個位(字符串末尾)向高位逐位相加,維護進位 carry。結果逆序存儲,最後反轉輸出。
#include <bits/stdc++.h>
using namespace std;
string addStrings(const string &a, const string &b) {
string res; int i = a.size()-1, j = b.size()-1, carry = 0;
while (i >= 0 || j >= 0 || carry) {
int sum = carry;
if (i >= 0) sum += a[i--] - '0';
if (j >= 0) sum += b[j--] - '0';
res.push_back('0' + sum % 10);
carry = sum / 10;
}
reverse(res.begin(), res.end());
return res;
}
int main() {
ios::sync_with_stdio(false); cin.tie(nullptr);
int T; cin >> T;
for (int tc = 1; tc <= T; ++tc) {
string a, b; cin >> a >> b;
string sum = addStrings(a, b);
if (tc > 1) cout << '\n';
cout << "Case " << tc << ":\n";
cout << a << " + " << b << " = " << sum << '\n';
}
return 0;
}
O(max(|a|, |b|)) 每測試案例,完全滿足限制。