首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

时间怎样才可以变的更短?ACM高手帮帮忙?该怎么处理

2012-02-21 
时间怎样才可以变的更短???ACM高手帮帮忙?我写了个程序但是他的运行时间是1015ms但是我要的是他的时间小于

时间怎样才可以变的更短???ACM高手帮帮忙?
我写了个程序   但是他的运行时间是1015   ms       但是我要的是他的时间小于   1000     我该怎么改呢??那个高手帮帮忙??
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <iostream>
using   namespace   std;
int   main()
{
          int   a,b,i,j,c,k,ren   ,len   ;
  int   p[100000];
  cin   > >   a;
  for(   i   =   0   ;   i   <   a   ;   i++)
  {
    cin   > >   b;
    p[0]   =   1;
    len   =   1;
    ren   =   0;
    c   =   0;
    for(   j   =   1   ;   j   <=   b;   j++)
    {
              for(   k   =   0   ;   k   <   len   ;   k++)
      {
     
                    c=   p[k]   *   j   +   ren   ;
    p[k]   =   c   %   10;
    ren   =   c   /   10;

      }
    while(ren   >   0)
                                {

                                  p[len]   =   ren   %10;
                                  len   ++;
                                  ren   =   ren   /   10;
 
  }
    }
cout   < <   len   < <   endl;
  }

return   0;
}




[解决办法]
log(2*pi*n*(n/e)^n)就是n!的位数!!!!!!呵呵
[解决办法]
n!有一个近似估计式:sqrt(2*pi*n)*[(n/e)^n]*[1+1/(12n)] (1)
其中:sqrt()是平方根函数;pi就是圆周率;e就是自然底数。

于是n!的位数可以对式(1)取以10为底的对数来近似。

对式(1)取以10为底的对数,
得到:log10( sqrt(2*pi*n)*[(n/e)^n]*[1+1/(12n)] ) [log10():以10为底的对数]

化简,得到:0.5*log10(2*pi*n)+n*log10(n/e)+log10(1+1/(12n)) (2)

因此,n!的位数可以由式(2)来近似了,而式(2)是易于计算的。

热点排行