15.7 當 long long 也裝不下:大數
上一節的結尾埋了顆雷:10^{18} 等級的數,long long 接得住;那100 位數呢?上冊 2.3 的型態表到 long long(19 位)就完了,C++ 沒有更大的內建整數型態——換型態這條路,到頭了。
但你在小學就見過答案。人類算 987 + 456 從來不是「一口吞下整個數」,而是一位一位算,滿十進位——直式運算根本不在乎數字有幾位,列得下就算得完。程式也一樣:別把數字塞進單一變數,改用「一格存一位」的陣列,用迴圈模擬直式運算。
位數多到內建型態裝不下的數,競程稱為大數(big number)。它的出場場合:部分 APCS 題、明確要求「精確的十進位答案」的題目——這種數當然也不能用 double 存(9.6 說過,double 超過 2^{53} 連整數都存不準,而大數要的就是每一位都精確)。