1.
由于n!最后得到的数是十进制,故对于一个十进制数,求其位数可以对该数取其10的对数,最后再加1~
易知:n!=n*(n-1)*(n-2)*......*3*2*1
∴lg(n!)=lg(n)+lg(n-1)+lg(n-2)+......+lg(3)+lg(2)+lg(1);
2.Stirling数求N!的位数:log10(n!)=0.5 * log10(2 * PI * n) + n * log10(n / e);
#include<cstdio>
#include<cmath>
#define e exp(1) //计算e的一次方
#define pi acos(-1.0)
int main()
{
int t,n;
while(~scanf("%d",&t)){
while(t--)
{
scanf("%d",&n);
double sum= 1.0 / 2 * log10(2 * pi * n) + n * log10(n / e);
printf("%d\n",(int)sum+1);
}
}
}