这里有两个ACM 试题的代码 HDU 1018 请大神看看为什么第一个超时,第二个却AC了,在线等。

这个是超时的#include<stdio.h>#include<math.h>intmain(){inti,N,n;doublenum;while(scanf("%d",... 这个是超时的
#include<stdio.h>
#include<math.h>
int main()
{
int i,N,n;
double num;
while(scanf("%d",&N)!=EOF)
{
while(N--)
{
num=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
num=num+log10((double)i);
}
printf("%d\n",(int)num+1);
}
}
return 0;
}
这个是AC的
#include<stdio.h>
#include<math.h>
int main()
{
int n,m,i;
double sum;
while(scanf("%d",&n)!=EOF){
while(n--){
scanf("%d",&m);
sum=0;
for(i=1;i<=m;i++)
sum=sum+log10((double)i);
printf("%d\n",(int)sum+1);
}
}
return 0;
}
展开
 我来答
匿名用户
2015-02-09
展开全部

2个除了参数一模一样啊,我直接复制了你第一个代码,也是AC的。不信你试试看。

---------------------------------------------------------------------------------------------------------------------------

对于楼下说的,没用过G++,不过确实421MS有点渣,用斯特林公式的话快多了。

#include<stdio.h>
#include<math.h>

#define e 2.71828182

int main()
{

   int N,n;
   double num;
   while(scanf("%d",&N)!=EOF)
   {
       while(N--)
       {
           scanf("%d",&n);
           num=(double)n*log10(n*1.0/e)+0.5*log10(2.0*n*3.1415926);

           printf("%d\n",(int)num+1);
       }
   }
   return 0;

}

追问
为什么你用C++  AC 了,但是用G++时间就会超出
追答
没接触过G++,不过确实超时,C++稳定在400多 MS,杭电的OJ后台是windows系统(VC++),而G++是在LINUX系统下的编译器,所以快。其它平台就不一样了。但是你的代码只有2个循环、log的时间复杂度O(1),理论上感觉不会超时啊。只能说直接用斯特林公式单循环更快。ACM本来就要掌握大量数学公式,从这点来讲用斯特林公式更高级、效率更高。
porker2008
2015-02-09 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7066
采纳率:62%
帮助的人:1.1亿
展开全部
主要是你的代码容易卡在1000ms上,有时候900+ms就能过,有时候1000+ms就超时
应该尝试提升效率,避免卡在时限上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式