方法一:
log10();
#include<stdio.h>
#include<math.h>
int main()
{
int i,T,n;
double ans;
scanf("%d",&T);
while(T--)
{
ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
ans+=log10(i);
printf("%d\n",(int)ans+1);
}
return 0;
}
方法二:
Stirling公式
注意π和e的取值,精度不高会wa;
#include<stdio.h>
#include<math.h>
#define p acos(-1) //控制精度
#define e exp(1) //控制精度
int main()
{
int T,n,ans;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
ans=(int)(0.5*log10(2.0*p*n)+n*log10(1.0*n/e));
printf("%d\n",ans+1);
}
return 0;
}
方法三
#include<stdio.h>
int main()
{
int T,n,s,i;
double a;//注意double型数据,否则误差太大得不到正确的结果
scanf("%d",&T);
while(n--)
{
s=1;
a=1;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
a=a*i;
if(a>=10)
while(a>=10)
a/=10,s++;
}
printf("%d %lf\n",s,a);
}
return 0;
}