#36739: 一次計算完所有階層的方法


vlva8166@gmail.com (風行)

學校 : 不指定學校
編號 : 160868
來源 : [111.185.184.49]
最後登入時間 :
2024-01-04 21:34:15
c119. 10220 - I Love Big Numbers -- UVa10220 | From: [111.185.245.34] | 發表日期 : 2023-08-05 05:21

題目最高可達 1000! -> 數字超大 不能用long long int表示
這時候需要借助大數乘法的概念

陣列可開成這樣
long long int fact[1001][2600] = {{1},{1}};

n! = (n-1)! * n -> 第一個迴圈 是將每位數乘上n
第二個迴圈處理進位

有所有的階層值,那麼之後算位數相加就簡單了

以下提供大數乘法的code:
for(int i=2;i<1001;i++)
    {
        for(int j=0;j<2600;j++) // 每位數*i
        {
            fact[i][j] = fact[i-1][j] * i;
        }

        // 反過來表示
        // ex: 120 -> 0 2 1
        for(int j=0;j<2600;j++)
        {
            if (fact[i][j] >= 10) // 乘法進法
            {
                fact[i][j+1] += (fact[i][j]/10);
                fact[i][j] %= 10;
            }
        }
    }
 
ZeroJudge Forum