C语言实现:求100-999之间的水仙花数详解

Dylan
Dylan
发布时间:2026-10-14 | 4人浏览过
原创

水仙花数(Narcissistic number)又称自恋数,是指一个三位数,其各位数字的立方和等于该数本身。本文将使用C语言通过遍历和条件判断,找出100至999范围内的所有水仙花数,并详细解析核心算法逻辑。

什么是水仙花数

水仙花数是一个数学概念,通常特指三位数的自幂数。如果一个三位数 ABC 满足:
A3 + B3 + C3 = ABC,则该数为水仙花数。
例如:153 是一个水仙花数,因为 13 + 53 + 33 = 1 + 125 + 27 = 153。

算法思路与准备

要解决这个问题,我们需要计算机执行以下逻辑:

  1. 遍历范围:从100到999的所有整数。
  2. 拆分位数:提取每个数的百位、十位和个位。
  3. 计算立方和:将各位数字分别求立方后相加。
  4. 条件判断:如果立方和等于原数,则输出该数。

第1步:构建主循环结构

首先引入必要的头文件 <iostream> 用于输入输出,以及 <cmath> 用于调用幂函数 pow()。定义整型变量用于存储当前数字及其位值。

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int number, hun, ten, gw, sum;
    // 遍历100到999之间的所有整数
    for (number = 100; number < 1000; ++number) {
        // ...后续步骤
    }
    return 0;
}

第2步:提取各位数字

在循环内部,我们需要将三位数拆解。利用整数除法和取模运算即可高效完成:

  • 百位 (hun):直接除以100取整,即 number / 100。
  • 十位 (ten):先对100取模去掉百位,再除以10,即 number % 100 / 10。
  • 个位 (gw):直接对10取模,即 number % 10。

第3步:计算并验证

利用 pow(base, exp) 函数计算各数位立方的和,并与原数字比较。若相等,则通过标准输出打印结果。

完整代码实现

以下是整合后的完整C++代码示例(注:虽引用标题为C语言,但使用了C++标准库特性如cout和pow,实际编译可通过):

#include <iostream>
#include <cmath>
using namespace std;

/* 
求100-999之间的水仙花数 
*/
int main() {
    int number, hun, ten, gw, sum;
    
    for (number = 100; number < 1000; ++number) {
        hun = number / 100;          // 获取百位
        ten = number % 100 / 10;     // 获取十位
        gw = number % 10;            // 获取个位
        
        // 计算各位数字的立方和
        sum = pow(hun, 3) + pow(ten, 3) + pow(gw, 3);
        
        // 判断是否为水仙花数
        if (sum == number) {
            cout << number << " 是水仙花数" << endl;
        }
    }
    
    return 0;
}

运行结果

编译并运行上述代码后,控制台将依次输出符合条件的水仙花数。根据数学原理,100-999范围内共有4个水仙花数:153, 370, 371, 407。

总结

本例通过简单的循环结构和算术运算,展示了如何分解数字并验证数学性质。这是学习条件分支和循环嵌套的经典入门案例。以上就是C语言/C++实现求100-999之间水仙花数的详细内容,更多关于算法基础练习的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表