ACM 階乘數字數

2022-05-05 08:51:10 字數 1097 閱讀 1210

描述

n!階乘是乙個非常大的數,大家都知道計算公式是n!=n*(n-1)······*2*1.現在你的任務是計算出n!的位數有多少(十進位制)?

輸入首行輸入n,表示有多少組測試資料(n<10)

隨後n行每行輸入一組測試資料 n( 0 < n < 1000000 )

輸出對於每個數n,輸出n!的(十進位制)位數。

樣例輸入

313

32000

樣例輸出

1

1130271

/*

nyoj69 階乘數字長度

* 方法一:

* 可設想n!的結果是不大於10的m次冪的數,即n!<=10^m(10的m次方),則不小於m的最小整數就是 n!的位數,對

* 該式兩邊取對數,有 m =log10^n! 即:m = log10^1+log10^2+log10^3...+log10^n 迴圈求和,就能算得m值,

* 該m是n!的精確位數。當n比較大的時候,這種方法方法需要花費很多的時間。

*

* 方法二:

* 利用斯特林(stirling)公式的進行求解。下面是推導得到的公式:

* res=(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );

* 當n=1的時候,上面的公式不適用,所以要單獨處理n=1的情況!

* 有關斯特林(stirling)公式及其相關推導,這裡就不進行詳細描述,有興趣的話可看這裡。

* 這種方法速度很快就可以得到結果。詳細證明如下:

*

*/#include

#include

using

namespace

std;

int normal(double

n)

return (int)x+1;}

long stirling(doublen)

returnx;}

intmain()

return0;

}

大數處理 階乘數字

計算出第乙個正整數n的階乘位數大於等於 10000的數是多少,即求最小的正整數 n滿足n 的位數大於等於 10000 知識點 某數 m 的位數可以由log10 n 1取得 include include include include include using namespace std cons...

洛谷 階乘數碼 階乘之和

題目描述求n 中某個數碼出現的次數。輸入格式 第一行為t 10 表示資料組數。接下來t行,每行乙個正整數n 1000 和數碼a。輸出格式 對於每組資料,輸出乙個整數,表示n 中a出現的次數。輸入樣例 1 2 5 27 0 輸出樣例 1 1 2 直接高精階乘 include include inclu...

JZOJ 5791 階乘 數論

description 有n個正整數a i 設它們乘積為p,你可以給p乘上乙個正整數q,使p q剛好為正整數m的階乘,求m的最小值。input 共兩行。第一行乙個正整數n。第二行n個正整數a i output 共一行乙個正整數m。題目要求乙個最小的m mm使m!m!m!包含p pp這個因子。可以把p...