C++判断水仙花数:算法原理与完整代码实现
本文介绍如何利用 C++ 语言识别并输出水仙花数(Armstrong number)。通过取模与除法运算分离百位、十位及个位,结合循环结构完成范围筛选,并提供完整的函数封装与执行结果。
一、水仙花数定义与识别原理
水仙花数(Narcissistic number),又称超完全数字不变数或阿姆斯特朗数,特指一个 3 位数满足以下数学特征:其每个数位上的数字的 3 次幂之和恰好等于该数本身。例如:1^3 + 5^3 + 3^3 = 153,因此 153 是一个水仙花数。
在 C++ 中进行判断的核心在于对整数进行数位拆分。假设目标数值为 a(100 ≤ a ≤ 999),可以通过基础算术运算符获取各个位置上的数字:
- 百位数 (
x1):直接除以 100 并取整,即a / 100。 - 十位数 (
x2):先对 100 取模以去除百位影响,再除以 10,即(a % 100) / 10。 - 个位数 (
x3):直接对 10 取模,即a % 10。
得到三个数位后,计算 sum = x1^3 + x2^3 + x3^3。若 sum == a,则判定为水仙花数。
二、C++ 代码实现步骤
第1步:封装数位检测函数
为了提高代码复用性,我们将判断逻辑封装为一个名为 narcissus 的布尔类型函数。该函数接收一个整型参数 a,内部完成数位提取与幂运算求和。
/* 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 true;
else
return false;
}
第2步:构建主程序与循环控制
在 main 函数中,我们使用 for 循环从 100 开始遍历至 999。对于每一个循环变量,调用上述函数进行检测,若返回真值则将其打印输出。
#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 << " ";
}
cout << endl;
return 0;
}
// 省略函数具体实现...
将上述两段代码合并运行后,控制台将列出所有符合定义的水仙花数:
三、执行结果验证
编译并执行该程序,终端会按照从小到大的顺序输出所有 3 位水仙花数(通常包括 153, 370, 371, 407)。程序运行无异常报错,验证了逻辑的正确性与语法的有效性。
以上就是 C++ 实现水仙花数判断实例的详细内容,更多关于 C++ 阿姆斯特朗数基础算法的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













