C语言实现:求100-999之间的水仙花数详解
水仙花数(Narcissistic number)又称自恋数,是指一个三位数,其各位数字的立方和等于该数本身。本文将使用C语言通过遍历和条件判断,找出100至999范围内的所有水仙花数,并详细解析核心算法逻辑。
什么是水仙花数
水仙花数是一个数学概念,通常特指三位数的自幂数。如果一个三位数 ABC 满足:A3 + B3 + C3 = ABC,则该数为水仙花数。
例如:153 是一个水仙花数,因为 13 + 53 + 33 = 1 + 125 + 27 = 153。
算法思路与准备
要解决这个问题,我们需要计算机执行以下逻辑:
- 遍历范围:从100到999的所有整数。
- 拆分位数:提取每个数的百位、十位和个位。
- 计算立方和:将各位数字分别求立方后相加。
- 条件判断:如果立方和等于原数,则输出该数。
第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之间水仙花数的详细内容,更多关于算法基础练习的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













