C++实现水仙花数判断实例

 更新时间:2022年01月05日 14:20:13   作者:Alkaid#3529  
大家好,本篇文章主要讲的是C++实现水仙花数判断实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

前言

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)或阿姆斯特朗数(Armstrong number),是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

找出指定范围内的所有水仙花数需要我们利用循环的相关知识解决,本文将从思路分析入手,带大家逐步简化问题,直到代码实现。

一、思路分析

如果一个数是水仙花数,那么它的每个位上的数字的 3次幂之和等于它本身,因此我们需要分离出它各个位置上的数字,并对他们的三次幂求和,与原数相等即可。

问题就简化为了分离各个位置上的数,对于百位,我们可以知道,因为数据类型为 int 整型,因此原数除以100即为百位数;对于十位,将原数模100后,除以10即可;对于个位,模10即可获得。

到此,整体思路已经明确,我们将其转化为代码。

二、代码实现

1.水仙花函数

我们首先来写一个函数,这个函数的功能是判断一个数是否为水仙花数,如果是,返回真;否则,返回假。

代码如下(示例):

/* Alkaid#3529 */

bool narcissus(int a)
{
	int sum = 0; // 记录最终求和结果

	int x1 = a / 100; // 原数除以100即为百位
	int x2 = a % 100 / 10; // 原数模100后,除以10就是十位数
	int x3 = a % 10; // 模10的结果就是个位数

	// 对得到的各位数的三次幂求和
	sum = x1 * x1 * x1 + x2 * x2 * x2 + x3 * x3 * x3;

	// 判断求和结果与原数是否相等
	if (sum == a)
		return 1;
	else
		return 0;
}

2.完整代码

在现有函数基础上,我们只需对所有三位数循环判断,若为真,输出;否则,跳过即可。

代码如下(示例):

/* Alkaid#3529 */

#include<iostream>
using namespace std;

bool narcissus(int a);

int main()
{
	cout << "水仙花数有:  ";

	// 从100开始,逐个检查所有三位数
	for (int i = 100; i < 1000; i++)
	{
		if (narcissus(i))
			cout << i << "  ";
	}

	return 0;
}

bool narcissus(int a)
{
	int sum = 0; // 记录最终求和结果

	int x1 = a / 100; // 原数除以100即为百位
	int x2 = a % 100 / 10; // 原数模100后,除以10就是十位数
	int x3 = a % 10; // 模10的结果就是个位数

	// 对得到的各位数的三次幂求和
	sum = x1 * x1 * x1 + x2 * x2 * x2 + x3 * x3 * x3;

	// 判断求和结果与原数是否相等
	if (sum == a)
		return 1;
	else
		return 0;
}
我们运行一下程序,看看结果如何。

在这里插入图片描述

经检验,代码运行无误,结果正确,可以放心复制粘贴。

总结

水仙花数的判断是常见的基础题型,除此之外,后续会陆续推出 C++ 的进阶题目,感兴趣且想学习的话不妨点点关注,你的点赞是我更新的最大动力哦!

到此这篇关于C++实现水仙花数判断实例的文章就介绍到这了,更多相关C++水仙花数判断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++用函数对算法性能进行测试

    C++用函数对算法性能进行测试

    算法无处不在,算法是程序的灵魂,而数据结构则是程序的骨架,二者共同构成了程序,那么如何评估算法的性能呢?理论上可以通过计算时间复杂度的方法来评估,但这是理性的认识,我们还有一种直观的评估方法,那就是程序执行的时间
    2022-08-08
  • C++程序内存栈区与堆区模型案例分析

    C++程序内存栈区与堆区模型案例分析

    一直以来总是对这个问题的认识比较朦胧,我相信很多朋友也是这样的,总是听到内存一会在栈上分配,一会又在堆上分配,那么它们之间到底是怎么的区别呢,让我们一起来看看
    2022-03-03
  • C++深入探索类真正的形态之struct与class

    C++深入探索类真正的形态之struct与class

    前边我们所定义的类,均是使用struct关键字来定义,但是C++中真正用于定义类的关键字为class,因为要C++兼容C,所以保留struct关键字,struct与class的用法完全相同
    2022-04-04
  • C++超细致讲解队列queue的使用

    C++超细致讲解队列queue的使用

    队列先进先出,即只能在容器的末尾添加新元素,只能从头部移除元素,下面这篇文章主要给大家介绍了关于C++中队列queue用法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • C++计算ICMP头的校验和实例

    C++计算ICMP头的校验和实例

    这篇文章主要介绍了C++计算ICMP头的校验和的方法,代码简单实用,对于校验ICMP报文来说有不错的实用价值,需要的朋友可以参考下
    2014-10-10
  • 一文快速掌握C++双端数组容器deque的使用

    一文快速掌握C++双端数组容器deque的使用

    本文和大家分享的是和vector容器功能很像的容器——deque,了解deque容器的本质,使用方法以及与vector容器的不同之处,感兴趣的快跟随小编一起学习学习吧
    2022-07-07
  • VC运用OPENGL加载BMP纹理图的实现方法汇总

    VC运用OPENGL加载BMP纹理图的实现方法汇总

    这篇文章主要介绍了VC运用OPENGL加载BMP纹理图的实现方法,对于更好的了解OpenGL很有帮助,需要的朋友可以参考下
    2014-07-07
  • C++中友元类和嵌套类使用详解

    C++中友元类和嵌套类使用详解

    友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元,所谓嵌套类,就是在类中声明的类。如下代码中,类Inner就是一个嵌套类,类Outer是外围类
    2022-08-08
  • 在C语言中getchar的使用方法和读取规则讲解

    在C语言中getchar的使用方法和读取规则讲解

    getchar中文意思是获取字符,getchar函数从标准输入输出里读取下一个字符,返回类型为int整形,返回用户输入的ASCII码值,如果到达文件末尾或者出错返回EOF,这篇文章主要介绍了在C语言中getchar的使用方法和读取规则,需要的朋友可以参考下
    2022-12-12
  • C++中的explicit关键字详解

    C++中的explicit关键字详解

    这篇文章主要介绍了C++中的explicit关键字详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07

最新评论