nyoj 69 數的長度

2021-08-18 17:53:30 字數 978 閱讀 9388

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:1描述

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

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

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

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

樣例輸入

313

32000

樣例輸出

1

1130271

**acm教程

思路:對於這種資料一般是不可求的,所以要麼是有規律可循,要麼有公式可用,而當我們去費心思的找規律的時候會發現,這道題沒有規律,所以就只能用公式了,——斯特林公式;

具體公式:n!

≈√(2

πn)(n/e)n

我們對等號兩邊同時取以10為底的對數,則可得:(設k為n!的位數)

k-1 =log10(n!)= log10(

√(2πn)

)+nlog10(

n/e)

k為什麼要減1呢?很簡單,log10(10) = 1,但是10是兩位數,所以我們所求的位數與實際相差1.

輔助知識:

log10(a*b) = log10(a) + log10(b)

log10(a/b) = log10(a) - log10(b)

**:

#include#include#include#include#include#include#include#includeusing namespace std;

int main()

printf("%d\n",ans);

}return 0;

}

NYOJ 69 數的長度

時間限制 3000 ms 記憶體限制 65535 kb難度 1 描述 n!階乘是乙個非常大的數,大家都知道計算公式是n n n 1 2 1.現在你的任務是計算出n!的位數有多少 十進位制 輸入 首行輸入n,表示有多少組測試資料 n 10 隨後n行每行輸入一組測試資料 n 0 n 1000000 輸出...

69 數的長度

時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 n!階乘是乙個非常大的數,大家都知道計算公式是n n n 1 2 1.現在你的任務是計算出n!的位數有多少 十進位制 輸入 首行輸入n,表示有多少組測試資料 n 10 隨後n行每行輸入一組測試資料 n 0 n 1000000 輸...

南陽 69 數的長度

stirling公式 斯特林公式 n!1 2 3 4 5 n 如果要計算n!後得到的位數,則我們可以知道其等於lgn!1 lgn!lg1 lg2 lg3 lg4 lg5 lgn 但是當n很大的時候,我們可以通過數學公式進行優化 即stirling公式 n!sqrt 2 pi n n e n pi 3...