- 老师答疑区
- 帖子详情
老师参与
自己写的函数pow(a,b)更快吗?
蒲江三哥
发表于2020年03月23日
<p><code class="brush:cpp;toolbar:false" >#include <stdio.h>
int pow(int a,int b);
int main()
{
int n,s=0,i;
scanf("%d",&n);
int a,b,j;
a=(int)pow(10,n-1);
b=(int)pow(10,n);
for (i=a;i<=b;i++)
{
j=i;
s=0;
while (j)
{
s+=pow(j%10,n);
j=j/10;
}
if (s==i) printf("%d\n",i);
}
return 0;
}
int pow(int a,int b)
{
int t=1,i=0;
for (i;i<b;i++) t=t*a;
return t;
}</code><img src="https://nos.netease.com/edu-image/3bf313c630d043b1bd4b0fda948c7b14.JPG" /></p><p><img src="https://nos.netease.com/edu-image/801362666f94460bbb0edd35914edf55.JPG" />以上依次是拼题A上面的一道题的代码,提交结果与题目。但是我之前提交的代码只有最后一个测试点没有通过,代码的差别就是,之前的那个代码,pow(x,n)指数函数是调用<math.h>库里面的函数。然后提交一直是最后一个点测试不成功。我到网上搜索了这道题,发现他们的代码和我几乎一样,差别就是pow函数是否是自己写的。结果试了一下他们的代码,全部通过。我后面也把我自己的pow函数改成自己写的函数。结果当然也是全部通过,而且在测试6位水仙花数的时候,耗时几乎是原来的10分之一。之前是407ms,x现在是50ms。</p><p><br /></p><p>实在太奇怪了。同时我想问,程序里面用了双层循环,有没有办法降低时间复杂度,只用一层循环?</p>
1
回复