求一个数x的位数,用log10(x)+1即可。
斯特林公式 n!=sqrt(2*pi*n)*(n/e)^n , 那么 n的阶乘位数 = log10 (sqrt(2*pi*n)*(n/e)^n) +1 =0.5* log10 (2*pi*n)+n*log10(n/e) +1 ;
#include <stdio.h>
#include <math.h>
#define PI acos(-1.0)
#define e 2.718281828459
int main() {
__int64 len,n ;
scanf ("%I64d",&n);
if(n == 1) printf("1\n");
else
{
//斯特林公式n!=sqrt(2*PI*n)*(n/e)^n
len=0.5*log10(2.0*PI*n)+n*log10(n*1.0/e)+1;
printf("%I64d\n",len);
}
return 0;
}