【发布时间】:2017-03-19 17:47:59
【问题描述】:
我尝试运行此代码,但在少数情况下显示超出时间限制,我该如何缩短时间?
我需要了解我在我的程序中使用了哪些时间很长的东西,比如一些函数等。我知道通过改进迭代和复杂性,我可以减少执行时间,但它没有多大帮助。请帮助
程序很简单,我取点a和点b,计算所有回文数的个数。
#include<stdio.h>
int ifpalin(int g)
{
int rev=0;
int tmp=g;
while(tmp>0)
{
rev=rev*10+(tmp%10);
tmp=tmp/10;
}
if(rev==g)
return 1;
else
return 0;
}
int findpalin(int a1,int b1)
{
int sm=0;
for(int i=a1;i<=b1;i++)
{
if (ifpalin(i)==1)
sm++;
}
printf("%d",sm);
printf("\n");
return 0;
}
int main()
{
int a,b,n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a);
scanf("%d",&b);
findpalin(a,b);
}
return 0;
}
【问题讨论】:
-
C++ 还是纯 C ?
-
如果此代码“有效”,但性能不够,codereview.stackexchange.com 可能更适合您的帖子。
-
不要颠倒整个事情。当你不匹配或完成一半时停止。
-
有趣的问题。你可以做几件事来优化你的程序。您可以通过从 ifpalin() 返回 rev 来摆脱至少一个 if-test,然后将返回的值与 findpalin() 中的 i 进行比较。另一种潜在的优化(测量它)是用一次调用 div() 替换 tmp 的模数和除法。
-
您的代码不仅比应有的慢 0.0015 秒。它只是在超过时间限制后终止。它比这慢得多。您需要使用更高效的算法。
标签: c++ c algorithm optimization