本單元常犯錯誤總覽
| # | 錯誤描述 | 錯誤類型 | ✗ 錯誤寫法 | ✓ 正確寫法 |
|---|---|---|---|---|
| 1 | 進制字串轉整數,累積變數開 int | 溢位 WA | int val;(數值上看 10^{18}) |
long long val; |
| 2 | 整數轉進制字串,忘記特判 0 | 什麼都沒輸出 | while (x > 0) 一次都不跑 |
開頭先判 x == 0,直接輸出 0 |
| 3 | 低位先取出來,忘記反轉就輸出 | 輸出左右顛倒 | 取完直接 cout << ans; |
reverse 之後再印,或倒著印 |
| 4 | 數值 10 以上仍用 '0' + d 轉字元 |
印出亂碼 | '0' + 15 是 '?' |
d >= 10 時用 'A' + (d - 10) |
| 5 | 題目給小寫字母,仍用 c - 'A' + 10 |
數值錯得離譜 | 'a' - 'A' + 10 是 42 |
先 c = toupper(c) 統一(8.5) |
| 6 | 大數輸出忘記去前導零 | Wrong Answer | 印出 0100、007 |
while (C.size() > 1 && C.back() == 0) C.pop_back(); |
| 7 | 去前導零去過頭,0 印成空字串 | Wrong Answer | while (C.back() == 0) 無保底 |
條件加上 C.size() > 1 |
| 8 | 大數乘法累加陣列開 int | 位數大時溢位 | vector<int> C; 硬扛累加 |
vector<long long> C(n + m, 0); |
| 9 | stoi 餵超過 int 範圍的進制字串 |
RE | stoi(s, nullptr, 2) 吃長字串 |
用 stoll;long long 也裝不下就走大數 |