这里有两个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;
} 展开
#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;
} 展开
2个回答
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本来就要掌握大量数学公式,从这点来讲用斯特林公式更高级、效率更高。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询