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的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        