水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。
#include <stdio.h>
int main()
{ int a,s,q=0,m,t=1;
int x,y,z,sum=0,n,b=1,w=1;
printf("请输入你想要几位数的水仙花数:");
scanf("%d",&a);//4
s=a;
while(s>1)//4,3,2,1
{ t=t*10;//10,100,1000
s--;//3,2,1
}
m=t;//1000,最小的四位数
for(m=t;m<t*10;m++) //m=1000,m<10000,10000最大的四位数
{ y=m;
q=0;
sum=0;
while(q<a)//分离个十百千位
{
x=y%10;
y=y/10;
q++;
w=1;
b=1;//在for循环结束后重新定义b的值
for(b=1;b<=a;b++)//分离出来的数 ,x的a次方,如a=4时,x*x*x*x
{w=w*x;
}
sum=sum+w;//将分离出来的数次方后相加
}if(m==sum)//判断是不是水仙花数
{
n++;
printf("%d\n",m);
}
}
printf("总共有%d种水仙花数",n);
return 0;
}
我也在不断的学习,希望在学习的过程中,把代码慢慢的变简练,希望指出!