標準數據類型(long long等)無法存儲1000!這樣的超大整數(超過2500位)。解決方案是用數組模擬手工竪式乘法,每個元素存儲一位十進制數字。
void BigFactorial(int m) {
static int a[50000] = {0, 1}; // a[0]不用,a[1]存個位
int i, j, carry, tmp, length = 1; // carry為進位
for (i = 2; i <= m; i++) {
carry = 0;
for (j = 1; j <= length; j++) {
// 乘法轉化為:當前位 × i + 進位
tmp = a[j] * i + carry;
a[j] = tmp % 10; // 當前位結果
carry = tmp / 10; // 新進位
// 最高位產生進位時擴展數組長度
if (j == length && carry != 0)
length++;
}
}
// 逆序輸出(高位在前)
for (int k = length; k >= 1; k--)
printf("%d", a[k]);
}
| 技術點 | 實現細節 |
|---|---|
| 數組佈局 | 低下標存低位,符合人類閱讀習慣輸出時逆序 |
| 進位處理 | 單次乘法最大進位不超過log₁₀(i×9+carry),int類型足夠 |
| 動態擴展 | 僅在最高位產生進位時增加有效長度 |
| 靜態存儲 | 避免棧溢出,支持極大階乘計算 |
