日期:2026年2月3日
ZeroJudge 題目連結:c034. 00424 - Integer Inquiry
解題想法
Python 支援大數運算,直接加起來就好。C++ 則要用字串儲存數字,然後從最後一位往前加。
Python 程式碼
使用時間約為 17 ms,記憶體約為 3.3 MB,通過測試。
import sys
isum = 0
for line in sys.stdin:
n = int(line)
if n == 0: break
isum += n
print(isum)
C++ 程式碼
使用時間約為 4 ms,記憶體約為 336 kB,通過測試。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string big_sum(string s, string t) { // 輸出字串 s, t,輸出相加後的字串 u
string u = ""; // 儲存相加的結果
int m = (int)s.size(), n = (int)t.size(); // s, t 的長度
if (m > n) { // s 較長,在 t 前面補 0
string zeros (m-n, '0');
t = zeros + t;
} else if (m < n) { // t 較長,在 s 前面補 0
string zeros (n-m, '0');
s = zeros + s;
}
int mn = max(m, n), carry = 0; // 最大長度 mn,進位數值只會是 0 或 1
for(int i=mn-1; i>=0; i--) { // 由最後一位向前讀取
char a = s[i], b = t[i]; // 字元 a, b
int c = (a-'0') + (b-'0') + carry; // a, b 相加後的結果 c
u = char(c%10 + '0') + u; // 更新 u
carry = c/10; // 更新 carry
}
if (carry == 1) u = '1' + u; // 如果 carry 等於 1,在 u 前面補 1
for(int i=0; i<(int)u.size(); i++) { // 刪除 u 前面的 0
if (u[i] != '0') {
u = u.substr(i);
break;
}
}
return u;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
string s, t;
getline(cin, s);
while(getline(cin, t)) s = big_sum(s, t);
cout << s << "\n";
return 0;
}