目录
  • 前言
  • 一、思路分析
  • 二、代码实现
    • 1.水仙花函数
    • 2.完整代码
  • 总结

    前言

    水仙花数(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++ 的进阶题目,感兴趣且想学习的话不妨点点关注,你的点赞是我更新的最大动力哦!

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。