水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+3^3。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
程序
#include<stdio.h>
int main()
{
int n,a,b,c,d,e,f,g,i=0;
scanf("%d",&n);
if(n==3)
{ for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++){
i=a*100+b*10+c;
if(i==((a*a*a)+(b*b*b)+(c*c*c)))
printf("%d\n",i);
}
}
if(n==4)
{ for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
{i=a*1000+b*100+c*10+d;
if(i==((a*a*a*a)+(b*b*b*b)+(c*c*c*c)+(d*d*d*d)))
printf("%d\n",i);
}
}
if(n==5)
{ for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
for(e=0;e<=9;e++)
{i=a*10000+b*1000+c*100+d*10+e;
if(i==((a*a*a*a*a)+(b*b*b*b*b)+(c*c*c*c*c)+(d*d*d*d*d)+(e*e*e*e*e)))
printf("%d\n",i);
}
}
if(n==6)
{ for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
for(e=0;e<=9;e++)
for(f=0;f<=9;f++)
{i=a*100000+b*10000+c*1000+d*100+e*10+f;
if(i==((a*a*a*a*a*a)+(b*b*b*b*b*b)+(c*c*c*c*c*c)+(d*d*d*d*d*d)+(e*e*e*e*e*e)
+(f*f*f*f*f*f)))
printf("%d\n",i);
}
}
if(n==7)
{ for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
for(e=0;e<=9;e++)
for(f=0;f<=9;f++)
for(g=0;g<=9;g++)
{i=a*1000000+b*100000+c*10000+d*1000+e*100+f*10+g;
if(i==((a*a*a*a*a*a*a)+(b*b*b*b*b*b*b)+(c*c*c*c*c*c*c)+(d*d*d*d*d*d*d)
+(e*e*e*e*e*e*e)+(f*f*f*f*f*f*f)+(g*g*g*g*g*g*g)))
printf("%d\n",i);
}
}
}
结果