hdu1018--Big Number
主要是使用了下面這個公式:
log10(n!)=log10(1*2*3…*n)=log10(1)+log10(2)+…+log10(n)
注意:
這邊的result要用double值,精度比較高,我wrong了一次就因為把它設成float值了
代碼如下:
?
#include<stdio.h>
#include<math.h>
int main()
{
?int n,t;
?double result;
?scanf("%d",&t);
?while(t--)
?{
??scanf("%d",&n);
??result=log10((float)n);
??while(n!=1)
??{
???n--;
???result+=log10((float)n);
??}
??printf("%d\n",(int)result+1);
?}
?return 0;
}
這個程序效率不高,提交以后看了一下,好像有2000多個ms
?
在網上還查到一個資料:
《計算機程序設計藝術》中給出了另一個公式
n! = sqrt(2*π*n) * ((n/e)^n) * (1 + 1/(12*n) + 1/(288*n*n) + O(1/n^3))
π = acos(-1)
e = exp(1)
兩邊對10取對數
忽略log10(1 + 1/(12*n) + 1/(288*n*n) + O(1/n^3)) ≈ log10(1) = 0
得到公式
log10(n!) = log10(sqrt(2 * pi * n)) + n * log10(n / e)
有興趣的朋友可以用這個公式做做
轉載于:https://www.cnblogs.com/pandy/archive/2008/10/24/1318347.html
總結
以上是生活随笔為你收集整理的hdu1018--Big Number的全部內容,希望文章能夠幫你解決所遇到的問題。