語法書 / AA 競程語法書 下冊 / 第九單元 / 本單元常犯錯誤總覽

本單元常犯錯誤總覽

# 錯誤描述 錯誤類型 ✗ 錯誤寫法 ✓ 正確寫法
1 float 精度不足 WA float x; double x;
2 兩個整數相除想拿小數 Wrong Answer double x = a / b; double x = (double)a / b;
3 事後才乘 1.0 Wrong Answer a / b * 1.0 1.0 * a / b
4 用預設輸出提交 Wrong Answer cout << ans;(科學記號/只剩 6 位) cout << fixed << setprecision(12) << ans;
5 setprecision 沒搭 fixed Wrong Answer setprecision(3)(3 位有效數字 fixed << setprecision(3)
6 == 比較浮點數 邏輯錯誤 if (a == b) if (abs(a - b) < EPS)
7 大整數用 double 儲存/讀入 Wrong Answer double x;10^{18} 等級輸入 long long x;
8 用 e 記法寫大整數常數 差 1 的隱形錯 long long n = 1e18 + 1; long long n = 1000000000000000001LL;
9 pow 算整數次方 慢+不準 pow(10, 15) 迴圈連乘
10 (int) 當四捨五入 Wrong Answer (int)(2.7)2 (long long)round(2.7)
11 負數的 (int)floor 搞混 Wrong Answer 以為 (int)-2.9-3 (int) 向零;要向下用 floor
12 浮點轉型超出整數範圍 UB (int)3e9 先確認範圍,用 long long
13 上取整用浮點 ceil 硬算 誤差差 1 ceil(1.0 * A / B) (A + B - 1) / B
14 sqrt 大數直接轉整數 差 1 的隱形錯 (long long)sqrt(x) sqrtl 近似+整數修正(9.10