HDU1018求大數N!的位數 取對數

2021-07-29 21:15:17 字數 1193 閱讀 2765

problem description

input

input consists of several lines of integer numbers. the first line contains an integer n, which is the number of cases to be tested, followed by n lines, one integer 1 ≤ n ≤ 10

7 on each line.

output

sample input

2

1020

sample output

7

19

題目分析:

第一種做法:

n!=1*2*3....*n

求位數我們一般用對乙個數取對數就可以了 ,

log10(n!)=log10(1)+ log10(2) +log10(3)...+log10(n);

所以迴圈求和就可以了!

但是這裡注意一點 結果要加1!因為這裡計算出來的 log10(1)=0  !

所以結果要加上這個誤差 『1』

第二種做法:

這就是我最近研究的斯特林數,第一類斯特林數就可以做這個!

補充一點,斯特林數能夠做一切關於階乘有關的大數運算 要深入學習!

這裡給出遞迴公式:

log10(n!)=1.0/2*log10(2*pi*n)+n*log10(n/e)

#include #include #include #include #include #include #include using namespace std;

#define e 2.718281828459045235

#define pi acos(-1)

int main()//取對數

return 0;

}int main()//striling公式

return 0;

}

HDU 1018 階乘位數 數學

題意是求 n 的階乘的位數。直接求 n 的階乘再求其位數是不行的,開始時思路很扯淡,想直接用乙個陣列存每個數階乘的位數,用變數 tmp 去存 n 與 n 1 的階乘的最高位的數的乘積,那麼 n 的階乘的位數就等於 n 1 的階乘的位數加 tmp 的位數再減去 1。但這種做法是不對的,例如有可能最高位...

求大數n 的位數

也是壇裡面的問題 已知正整數 n 求 n!的十進位制數共有多少位。這個 n 怎麼辦?n 的增長率是很可怕的,比 e n 還要快,其實就是 o n n 當 n 值 較 大時,就不能忍了。這個 較 有多大呢?等後面算完了就知道了。遞迴算 n 便是尾遞迴來說,便是棧展得開,效率也受不了,便是效率受得了,也...

hdu 1018 計算乙個數階乘的位數

input input consists of several lines of integer numbers.the first line contains an integer n,which is the number of cases to be tested,followed by n ...