老师参与

自己写的函数pow(a,b)更快吗?

蒲江三哥 发表于2020年03月23日
<p><code class="brush:cpp;toolbar:false" >#include&nbsp;&lt;stdio.h&gt; int&nbsp;pow(int&nbsp;a,int&nbsp;b); int&nbsp;main() { int&nbsp;n,s=0,i; scanf(&quot;%d&quot;,&amp;n); int&nbsp;a,b,j; a=(int)pow(10,n-1); b=(int)pow(10,n); for&nbsp;(i=a;i&lt;=b;i++) { j=i; s=0; while&nbsp;(j) { s+=pow(j%10,n); j=j/10; } if&nbsp;(s==i)&nbsp;printf(&quot;%d\n&quot;,i); } return&nbsp;0; } int&nbsp;pow(int&nbsp;a,int&nbsp;b) { int&nbsp;t=1,i=0; for&nbsp;(i;i&lt;b;i++)&nbsp;t=t*a; return&nbsp;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)指数函数是调用&lt;math.h&gt;库里面的函数。然后提交一直是最后一个点测试不成功。我到网上搜索了这道题,发现他们的代码和我几乎一样,差别就是pow函数是否是自己写的。结果试了一下他们的代码,全部通过。我后面也把我自己的pow函数改成自己写的函数。结果当然也是全部通过,而且在测试6位水仙花数的时候,耗时几乎是原来的10分之一。之前是407ms,x现在是50ms。</p><p><br /></p><p>实在太奇怪了。同时我想问,程序里面用了双层循环,有没有办法降低时间复杂度,只用一层循环?</p>
1 回复

    1楼

  • 青岛大学周强 发表于2020年03月23日
    1 | 0 | 举报
    <p>C语言自带的pow( )函数,是浮点数运算的,返回值是double类型的,而这个题目要求的是整数运算,浮点运算因为精度问题,结果就有可能错误。</p>
    青岛大学周强 发表于2020年03月23日
    添加评论