题意:求一个数的阶乘的长度。
解题思路:可以将n!表示成10的次幂,即n!=10^M(10的M次方,10^2是3位M+1就代表位数)则不小于M的最小整数就是 n!的位数,对该式两边取对数,有M=log10^n!即:M = log10^1+log10^2+log10^3...+log10^n循环求和,就能算得M值,该M是n!的精确位数。主要是使用了下面这个公式:log10(n!)=log10(1*2*3…*n)=log10(1)+log10(2)+…+log10(n)
Code:
#include<stdio.h>
#include<math.h>
int main()
{
int n,m,i;
double sum;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
scanf("%d",&m);
sum=0;
for(i=1;i<=m;i++)
sum=sum+log10((double)i);
printf("%d",(int)sum+1);
}
}
return 0;
}