水仙花数:指一个n位数,其各位数字的n次方之和刚好等于该数本身。
例如:153 = 1^3 + 5^3 + 3^3
思路:
假定给定一个数据data,具体检测方法如下:
1、求取data是几位数——假定为n位数;
2、获取data中每个位置上的数据,并对其进行求n次方之和;
3、求出的n次方之和再与data比较是否相等;
相等:则为水仙花数;否则:不是。
打印1~100000的水仙花数:
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
for (i = 0; i <= 1000000; i++)
{
//1、计算出i是几位数 - n位数
int n = 1;
int tmp = i;
while (tmp>9) //153
{
tmp /= 10;
n++; //1 2 3
}
//2、计算i的十进制的每一位的n次方之和,判断是否等于i本身
tmp = i;
int sum = 0;
while (tmp)
{
sum += (int)pow(tmp % 10, n); //pow(x,y)计算x的y次方
tmp /= 10;
}
//3、判断是否相等
if (sum == i)
{
printf("%d ", i);
}
}
return 0;
}