N! (N的階乘) 是非常大的數,計算公式為:N! = N * (N - 1) * (N - 2) * ... * 2 * 1)。現在需要知道N!有多少(十進制)位。
input:每行輸入1個正整數N。0 < N < 1000000
output:對於每個N,輸出N!的(十進制)位數。
input:32000 1000000
output:130271 55657092)算法分析:
對於任意一個給定的正整數a, 假設10^(x-1)<=a<10^x,那麼顯然a的位數為x位,又因為log10(10^(x-1))<=log10(a)<(log10(10^x)) 即x-1<=log10(a)<x 則(int)log10(a)=x-1, 即(int)log10(a)+1=x 即a的位數是(int)log10(a)+1,我們知道了一個正整數a的位數等於(int)log10(a) + 1,現在來求n的階乘的位數:假設A=n!=1*2*3*......*n,那麼我們要求的就是(int)log10(A)+1,而log10(A)=log10(1*2*3*......n) (根據log10(a*b) = log10(a) + log10(b)有)=log10(1)+log10(2)+log10(3)+......+log10(n)所以n的階乘的位數等於(int)(log10(1)+log10(2)+log10(3)+......+log10(n)) + 1 3)源代碼: #include<stdio.h> #include<math.h> int main() { int n,i;
double a;
while(scanf("%d",&n)!=EOF)
{
a=0;
for(i=1;i<=n;i++)
{
a=a+(log10(i));
}
printf("%d\n",(int)a+1);
}
}