求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
//思路:这个题目有重复的步骤,所以需要使用循环
#include<stdio.h>
int jude(int a) //定义的函数,用于条件判断
{
int n = a; //因为后面会用到a,但是a不可以改变,所以创建一个n,对n进行处
理,间接的对a进行处理(这里的a是形参,和后面主函数的a的意义不
同)
int count = 0; //要累加的时候一般要初始化为0
int sum = 0;
while (n != 0) //需要得到数字的位数;思路:假设a=9,n=9,9!=0;进入循环,count
加上1,变为1,执行下一步,这时n=0;不满足条件,跳出循环,count既是该数的位数
//假设a=99,n=99,99!=0;进入循环,处理后n=9,同上
{
count++;
n /= 10;
}
n = a; //由于n后面还需要使用其原来的值,而经过上面的处理后n=0,所以再次
对n初始化使其为a的值
while (n != 0)
{
int product = 1; //累乘时一般初始化为1
for (int i = 1; i <= count; i++)//对每一位上的数字进行乘积达到各位数的n次方
{
product *= (n % 10);
}
sum += product; //将每一位的n次方相加
n /= 10;
}
return sum; //函数的返回值为每一位的n次方相加
}
int main()
{
int a = 0;
for (a = 0; a < 100000; a++)//可以改变a和100000的值,达到求不同范围的水仙花数
{
if (a == jude(a)) //条件判断,如果jude函数反回的值与其本身相同,则是水仙花数
{
printf("%d ", a); //输出水仙花数
}
}
return 0;
}