题意:
给出一个数,输出这个数的阶乘的位数
Stirling公式: n! = ((2*pi*n)^(1/2))*((n/e)^n); 前提是n > 3;
n!的位数就是以10为底的对数+1;
那么这个式子就能转化为lg(n!) = (lg(2*pi)+lg(n))/2 + n*(lg(n)-lg(e));
#include <iostream>
#include <math.h>
using namespace std;
const long double c1 = 0.798179868358;
const long double c2 = 0.434294481903;
int main()
{
int n,m;
cin>>n;
while(n--)
{
cin>>m;
long double c3 = log10((double)m);
if(m>3)
{
long long int ti = (c1+c3)/2+(c3-c2)*m+1;
cout<<ti<<endl;
}
else cout<<1<<endl;
}
return 0;
}