作者在 2007-12-31 17:12:39 发布以下内容
这题开始的时候就用n=log1+log2……logn,为了不超时还打了了一张表,结果很搞笑,超界了-_-!!!!
于是去看了下其他人的解题报告看到了一种方法就是使用Stirling公式。
但是这个是一个在n趋近于无穷的是后的公式,所以先还是要用前面的等到可能要超界了是后才用stirling公式。
源代码
:
#include <iostream>
#include <math.h>
#define maxn 100001
const double e = 2.7182818284590452354, pi = 3.141592653589793239;
double biao[maxn];
using namespace std;
main()
{
biao[0]=0;
for(int i=1;i<maxn;i++)
biao[i]=log10((double)i)+biao[i-1];
int n;
cin >>n;
while(n--)
{
int t;
double ans;
cin>>t;
if(t<maxn)
ans=biao[t];
else{
ans=log10(sqrt(2*pi*t))+t*log10(t/e);
}
cout<<(int)ans+1<<endl;
}
return 0;
}