pku 1423 Big Number

作者在 2007-12-31 17:12:39 发布以下内容

这题开始的时候就用n=log1+log2……logn,为了不超时还打了了一张表,结果很搞笑,超界了-_-!!!!

于是去看了下其他人的解题报告看到了一种方法就是使用Stirling公式

 

\begin{displaymath}n! \sim \sqrt{2 \pi} \; n^{\displaystyle. (n+ 1/2)} \;e^{\displaystyle-n} \end{displaymath}

 

但是这个是一个在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;
}

acm | 阅读 2931 次
文章评论,共1条
keloy(作者)
2008-04-02 23:06
1
嘿嘿,就是就是,超界很搞笑吧
游客请输入验证码
浏览255996次