所谓“水仙花数”是指一个3位数,其各位数字立方(位数次方)之和等于该数本身。
为了使规律更普遍,将其推广到一般——不限位数(广义水仙花数)
求0~100000之间的广义水仙花数
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
for (i = 0; i < 100000; i++)
{
int tmp = i;//为了避免死循环 重新定义变量代表i
int count = 1;//定义变量存储i的位数
while (tmp / 10)//求i是几位数
{
count++;
tmp /= 10;
}
tmp = i;//为了避免死循环不改变i
int sum = 0;//sum存储各位次方数的和
while (tmp)
{
int d = tmp % 10;
sum+=pow(d, count);//引用pow求d的count次方
tmp /= 10;
}
if (sum == i)
{
printf("%d ", sum);
}
}
}
程序结果如下: