首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言大數階乘計算:高精度乘法實現萬位數結果

     編輯:關於C

問題背景

標準數據類型(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類型足夠
動態擴展僅在最高位產生進位時增加有效長度
靜態存儲避免棧溢出,支持極大階乘計算

1000! 計算結果展示

1000階乘計算結果

性能與擴展

  • 時間複雜度:O(m²) - 雙重循環,m為階乘參數
  • 空間複雜度:O(m log m) - 結果位數與m對數成正比
  • 優化方向:可用FFT大整數乘法將複雜度降至O(m log²m)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved