题目:求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身
如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
首先,“水仙花数”是一个指一个n位数
题目要求输出0~100000之间的水仙花数,那这个n可能是三位数,四位数......
判断各位数字的n次方之和确好等于该数本身
所以我们需要得到这个数的位数
要得到各位数字的n次方之和就需要得到这个数的各位数字
通过取余操作可以得到这个数的最低位,通过除10操作又可以去掉这个数的最低位
如此循环,便可以得到这个数的每一位
以下展示的是一个判断是否水仙花数的函数
注:
创建了俩个局部变量m , l 用于存放要判断的这个数
因为以下对n变量进行操作会对n的原始值产生影响
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int is_narcissiatic_number(int n)
{
int m = n;
int l = n;
//先判断n的位数
int count = 0;//计数
while (n)
{
count++;
n /= 10;
}
//得到其各位数字的n次方之和
int sum = 0;
while (m)
{
sum += pow(m % 10, count);
m /= 10;
}
if (sum == l)
return 1;
else
return 0;
}
int main()
{
int i = 0;
for (i = 1; i < 100000; i++)
{
if (is_narcissiatic_number(i) == 1)
{
printf("%d ", i);
}
}
return 0;
}