水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。
例如:153 = 1^3+ 5^3+ 3^3153=13+53+33
要求编写程序,计算所有N位水仙花数。
我第一次代码
#include <stdio.h>
#include <math.h>
int main(int argc,char *argv[])
{ int s=0,c,k,n,i,z,y,x;
scanf("%d",&c);
switch(c)
{ case 8:z=pow(10,7),y=pow(10,8);
break;
case 7:z=pow(10,6),y=pow(10,7);
break;
case 6:z=pow(10,5),y=pow(10,6);
break;
case 5:z=pow(10,4),y=pow(10,5);
break;
case 4:z=pow(10,3),y=pow(10,4);
break;
case 3:z=pow(10,2),y=pow(10,3);
break;
}
for(i=z;i<y;i++)
{
k=i;
s=0;
while(k)
{ n=k%10;
k=k/10;
s=s+pow(n,c);}
if(s==i)
printf("%d\n",i);
}
}
直接运行超时,我?????
啊这,看来第8位算得太慢,嗯,怎么优化程序呢?直接上网查8位水仙花数(其实3位的才算水仙花数)啊这,好家伙直接z=z*2,y=y-z/2;这2个代码加上,直接ac。