题库(1)_判断一个数是不是水仙花数

什么是水仙花数

我敢保证如果不是编程的需要,你可能这辈子都不会知道有水仙花数这个奇怪的东西,那么我就给大家科普一下什么是水仙花数。
水仙花数(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型的所有水仙花数;欢迎技术交流

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值