#include <stdio.h>
#include <math.h>
#define PI 3.141592653589793239
#define E 2.7182818284590452354
int main()
{
int n,i;/*n是表示输入数的个数*/
double a,b;
int num[30]={0};
int ans,x;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&num[i]);
/*依次处理、输出每个数字*/
for(i=0;i<n;i++){
b=0;
a=(double)(num[i]);
if(a>=10000)
b=log10(sqrt(2.0*PI*a))+a*log10(a/E);
else{
x=num[i];
while(x--){
b+=log10(a);
a-=1;
}
}
ans=(int)b;
if(ans<=b)
ans++;
printf("%d\n",ans);
}
return 0;
}
最先刚开始写的时候没有用斯特林公式,用十分朴素的方法写,结果提交上去是TLE;
后来在网上浏览了几位大神的帖子,开始尝试使用斯特林公式写,结果再交就是Runtime Error了,不懂为什么搞了好久;
今天突然灵机一动把数组大小改成30 ,就过了
poj真尼玛是个神奇的网站;
把数组大小改成20就是RE
改成50就是Wrong Answer
但是,比较大的收获是工欲善其事,必先利其器。