斯大林公式
n! = sqrt(2*pi*n)*(n/e)^n
将两边去对数
log10(n!) = 1/2log(2*pi*n) + n*log(n/e)
得到位数
注意 pi 和 e 的精度
#include <iostream>
#include <cmath>
#include <stdio.h>
#define e 2.718281828459
#define pi 3.1415926
using namespace std;
double f(int s)
{
return 0.5*log10(2*pi*s)+s*log10(s/e);
}
int main()
{ int a,s;
while(~scanf("%d",&a))
{
while(a--)
{
scanf("%d",&s);
printf("%d\n",(int)f(s)+1);
}
}
return 0;
}