水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例 如:153 = 13 + 53+ 33。 本题要求编写程序,计算所有N位水仙花数。
抱歉,刚学,不太懂,请问是哪里出问题了,求指教
#include <stdio.h>
#include <stdlib.h>
#include<math.h>//pow函数所需
int main()
{
int n;//n位数
scanf("%d",n);//输入位数
int m=1;//用于拆数的运算
int sum=0;//用于存放每位三次方的总和
while (n!=0)
{
m*=10; //假如n=3,m最后将等于1000
n-=1;
}
printf("m=%d ",m);//查看m的最终值
for (int i=m/10;i<m;i++) //假设n=3,i的初始值便为100,要求循环条件为i<1000
{
for (int e=1;e<m;e*=10) //假设n=3,循环条件为e<1000,所以会进行3轮循环
{
sum+=pow(i/e%10,3); //将i/e的三次方,暂存进sum
/* 假设i=123
第一轮 e=1 进入循环
sum=sum+(123/1%10)^3也就是sum=sum+(3)^3
e=e*10=10
第二轮 e=10
sum=sum+(123/10%10)^3也就是sum=sum+(2)^3
e=e*10=100
第三轮 e=100
sum=sum+(123/100%10)^3也就是sum=sum+(1)^3
e=e*10=1000
因为e=1000=m,所以无法进入循环/*/
printf("sum=%d ",sum);//查看sum中的数,可忽略
}
if(sum==i) //如果这个数各位的三次方的和于原本的数相等
{
printf("%d ",i); //输出这个数
}
sum=0;//容器归零
}
return 0;
}
运行结果