HDU 1013 "A + B Problem II" 要求計算兩個超長整數之和,位數遠超內置類型範圍,必須採用數組模擬人工豎式加法。
#include <iostream>
#include <cstring>
using namespace std;
int num1[1010], num2[1010], result[1010];
char str1[1010], str2[1010];
void add(int len1, int len2) {
// 字符轉數字並反轉存儲
for (int i = 0; i < len1; i++) num1[i] = str1[len1 - 1 - i] - '0';
for (int i = 0; i < len2; i++) num2[i] = str2[len2 - 1 - i] - '0';
int carry = 0, k = 0;
for (int i = 0; i < len1 || i < len2; i++) {
int sum = num1[i] + num2[i] + carry;
result[k++] = sum % 10;
carry = sum / 10;
}
if (carry) result[k++] = carry; // 處理最高位進位
// 輸出格式:原數字 + 原數字 = 結果
cout << str1 << " + " << str2 << " = ";
for (int i = k - 1; i >= 0; i--) cout << result[i];
cout << endl;
}
int main() {
int T; cin >> T;
for (int cas = 1; cas <= T; cas++) {
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
memset(result, 0, sizeof(result));
cin >> str1 >> str2;
cout << "Case " << cas << ":" << endl;
add(strlen(str1), strlen(str2));
if (cas < T) cout << endl; // 最後一組無空行
}
return 0;
}
時間 O(max(len1, len2)),空間 O(max(len1, len2)),完美滿足題目要求。