定义:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
这里我们认为n位数中,只要每位的n次方等于该数,该数便是一个水仙花数。
求解思路:1.由于不知道有几位数,所以首先我们先求出n位数确定的位数
2.在求余算出n位数的余数之后,利用pow(m,n)求m的n次方函数算出每位数的n次方
3.将每位数的n次方相加,判断是否等于该数;如果相等,则是水仙花数,否则不是
//水仙花数:n位数每位数的n次方等于该数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#include <math.h>
int main()
{
int i = 1;
//求1到10000的水仙花数
for (i = 1; i <= 10000; i++)
{
int count = 1; //水仙花数至少是一位
int tmp = i;
int sum = 0;
//1.判断位数
while (tmp / 10)
{
count++;
tmp = tmp / 10;
}
tmp = i; //while循环后已改变tmp值,所以tmp需要重新被赋值
//2.求和
while (tmp) //保证最高位的n次方不被丢掉
{
sum += pow(tmp % 10, count); //pow(float x,float y):求次方函数(x的y次方)
tmp = tmp / 10;
}
if (i == sum)
{
printf("%d ", i);
}
}
system("pause");
return 0;
}