一、水仙花数的概念
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。 (例如:1^3 + 5^3 + 3^3 = 153)
二、判断水仙花数的逻辑
要判断一个数字是否为水仙花数,首先要搞清它的逻辑关系,这也是对于每一个编程题的重中之重。
水仙花数的判断主要包含三个部分:
第一:设置一个大循环,从0~100000
#include<stdio.h>
int main()
{
int num = 0;
for(num = 0;num <= 100000;num++)
{
}
return 0;
}
第二:要判断当前的数字为几位数字。对此,可以封装成一个“int judge()”函数,代码如下:
int judge(int num)
{
int count = 0; //计算num的位数
while(num)
{
count++;
num /= 10; //每次去掉一位数
}
return count;
}
确定好位数之后,接下来就知道了每个位数上的数字要乘以几次幂了。
三、判断是否为水仙花数
要判断是否为水仙花数,就要将该数的每一位拆分开来,并把每一位数乘以“count”次幂后依次相加,如果该数等于相加之和,那么该数就为水仙花数。为了条理清晰,还是以函数的形式展现。函数为:int Is_number()
int Is_numbei(int num)
{
int i = judge(num); //调用计算位数的函数,取得该数的位数
int total = 0; // 存储每位数乘以次幂后的总数
while(num)
{
total += pow((num % 10),count);
num /= 10;
}
return total; //返回,并于该数比较
}
最后,只需将total与主函数中的num比较一下,便可判断完毕,完整代码如下:
#include<math.h>
#include<stdio.h>
int judge(int num)
{
int count = 0;
while (num)
{
count++;
num /= 10;
}
return count;
}
int Is_number(int num)
{
int total = 0;
int count = judge(num);
while (num)
{
total += (int)pow((num % 10), count);
num /= 10;
}
return total;
}
int main()
{
int num = 0;
printf("请打印0~100000之间的水仙花数:\n");
for ( ; num <= 100000; num++)
{
if (Is_number(num)==num)
printf("%d ", num);
}
return 0;
}
运行结果: