#include <math.h>
{
int count=0;
while( num!=0 )
{
count ++ ; //循环次数与数字位数相等
num/=10; //每次循环整除一次减少一位,num=0,循环结束
}
return count ; //将值返回给函数
}
int IsFlower(int num) /*此函数思想:逆序输出每一位数,连乘位数次,累加求和 。第1步,若用顺序输出会将程序复杂化。*/
{
int a;
int b=GetPlace( num); //b为位数
int sum = 0;
while(num!=0) //逆序输出
{
a = num % 10 ; //a接收每次求出的某一位数
num /= 10 ; // 每次循环整除一次减少一位,num=0,循环结束
int i=1;
int c=1;
while(i <= b) //当循环次数i小于等于位数b时,跳出循环
{
c*=a; //连乘位数次
i ++ ;
}
sum += c; //累加
}
return sum; //将累加的值返回给函数;由于循环结束后num=0,则在主函数中判断
}
int main()
{
printf("100~10000内的水仙花数有 ");
for(int num =100 ;num <= 10000;num++)
{
int sum=IsFlower( num ); //定义一个sum接收IsFlower函数返回的值
if(sum==num) //如果它们的位数方和与原来的数字相等,则它们是水仙花数,第3步
{
printf("%d ",num);
}
else
continue; //否则,直接进入下一次循环
}
return 0;
}
}