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
21020
sample output
719
題目分析:
第一種做法:
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 ...