什么是水仙花数
我敢保证如果不是编程的需要,你可能这辈子都不会知道有水仙花数这个奇怪的东西,那么我就给大家科普一下什么是水仙花数。
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),各种神奇的名字无形之中为它蒙上了神秘色彩,我们先不考录它的涵义,也不管是谁给他起的名字,简而言之,水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153);
如果仅仅判断一个三位数的每位数的立方和等不等于这个数,那我可能就不写这个文章了,我们扩张一下判断一个int型(0x00000000~0x7fff ffff)
十进制为4294967295或一个long型数据是否为水仙花数;
-
思路
自写代码之前最重要的就是理清思路,最忌讳的是想到哪写到哪。对于这个问题一般我选择在代码中用中文注释列好思路框架,一方面看着思路框架补代码,思路也清晰,一方面也不用后期注释; -
那么就展示一下我的思路框架
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//定义一个方法判断是不是水仙花数
void method()
{
int num;//输入待判断的数
printf("请输入一个数");
scanf("%d", &num);
if (num > 0x7fffffff)
{
printf("数太大,判断不了");
}
else {
//判断有几位,从而确定幂值;0x7fff=32767
}
//各位幂次放加起来
//判断是不是水仙花数
}
}
int main()
{
method();
return 0;
}
下面是完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<math.h>
void method()
{
int num;//输入待判断的数
int sum = 0;
printf("请输入一个数");
scanf("%d", &num);
if (num>0x7fff)
{
printf("数太大,判断不了");
}
else {
//判断有几位,从而确定幂值;0x7fff=32767
int n = 10;
for (int i = 1000000000; i > 0; i /= 10)
{
if (num / i != 0)
{
break;
}
--n;
}
//各位幂次放加起来
for (int i = 1; i < pow(10, n); i *= 10)
{
int a = num / i % 10;
//int a2 = pow(a, n);
sum += pow(a, n);
}
//判断是不是水仙花数
if (num == sum)
{
printf("是水仙花数\n");
}
else {
printf("不是水仙花数\n");
}
}
}
int main()
{
method();
system("pause");
return 0;
}
思路就是这样,你也可以改一个输出int型的所有水仙花数;欢迎技术交流