首先背景
斯特灵公式是一条用来取n阶乘近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用。从图中可以看出,即使在n很小的时候,斯特灵公式的取值已经十分准确。
斯特林公式
lnN!=NlnN-N+0.5ln(2Npi)***
要想求有多少位,将他换成以10为底便可!
利用换底公式得 lnN!/ln10=log10N!
把式子取整形加1就是位数!可以参考hdu1018题!
#include<cstdio>
#include<cstring>
#include<cmath>
#define pi acos(-1.0)
using namespace std;
int n;
int solve()
{
return (int)((n*log(n)-n+(log(2*pi*n))/2)/log(10))+1;
}
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
scanf("%d",&n);
int t=solve();
printf("%d\n",t);
}
return 0;
}