betterangela 2015-03-15 14:43 采纳率: 0%
浏览 2712

水仙花数代码如何减短运行时间

水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例 如:153 = 13 + 53+ 33。 本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3<=N<=7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:3

输出样例:153
370
371
407

我的代码运行起来超时;我知道可能是n=7时循环次数太多造成的.有什么办法解决呢

include

include

int main()
{
int n,i,x;
scanf("%d", &n);
x=pow(10,n-1);
int y=pow(10,n);
int sum,a,z,flag;
for(i=x;i {
z=x;
sum=0;
flag=i;
while(z>0)
{
a=flag/z;
sum+=pow(a,n);
flag=flag%z;
z/=10;
}
if(sum==i) printf("%d\n", i);
}
return 0;
}

  • 写回答

3条回答 默认 最新

  • threenewbee 2015-03-15 14:48
    关注

    pow的效率很低,因为它是浮点运算,可以直接内联整数循环,甚至可以数组查表来代替。这样可以快很多。

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器