打印出1到100000之间的水仙花数,水仙花数是一个N位数,它的每个位上的数字的 N次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
#include <stdio.h>
#include <math.h>
int Count(int x) //求数据是几位数
{
int i = 0;
while (x)
{
x /= 10; //每除一次10 就加1
i++;
}
return i;
}
int MyNarcissus(int x) //判断一个数是不是水仙花数
{
int j = x; //将原始数据备份便于后面判断是否相等
int count = Count(x); //求传入的数据是几位数
int sum = 0;
while (x)
{
int i=x % 10; //模10求出个位
sum += (int)pow(i, count); //求出n次方的结果加起来
x /= 10; //除10将高位换下来
}
return sum == j ? 1 : 0; //如果sum等于原始数据则返回1
}
int main()
{
int i = 0;
for (i = 0; i < 100000; i++) //循环1到100000
{
int x = MyNarcissus(i);
if (x == 1)
{
printf("%d ", i);
}
}
printf("\n");
return 0;
}
结果展示