问题描述
所谓水仙花数,就是指各位数字立方之和等于该数的数;a^3 称为 a 的立方,即等于 a×a×a 的值。
例如:因为 153=1^3 +5^3 +3^3 ,所以 153 是一个水仙花数。
输入
无
输出
若干行,每行一个整数,表示该范围内的所有水仙花数。
按从小到大的顺序输出。
代码
水仙花数是指一个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身。例如,153 是一个水仙花数,因为 1^3 + 5^3 + 3^3 = 153。
在这个问题中,我们只需要考虑三位数的水仙花数,因为题目中给出的例子是 153,暗示我们只需要考虑三位数。
我们可以通过以下步骤来找到所有的三位水仙花数:
- 遍历所有三位数(从 100 到 999)。
- 对于每一个数,将其各位数字分离出来。
- 计算每个数字的立方和。
- 如果立方和等于原数,则该数是水仙花数,输出该数。
下面是实现这个逻辑的 C++ 代码:
#include <iostream>
using namespace std;
int main() {
for (int num = 100; num <= 999; ++num) {
int sum = 0;
int temp = num;
// 分离各位数字并计算立方和
while (temp > 0) {
int digit = temp % 10;
sum += digit * digit * digit;
temp /= 10;
}
// 判断是否为水仙花数
if (sum == num) {
cout << num << endl;
}
}
return 0;
}
代码解释
-
遍历所有三位数:
for (int num = 100; num <= 999; ++num) {
从 100 到 999 遍历每一个三位数。
-
分离各位数字并计算立方和:
int sum = 0; int temp = num; while (temp > 0) { int digit = temp % 10; sum += digit * digit * digit; temp /= 10; }
使用
temp
变量来分离num
的各位数字,并计算每个数字的立方和。 -
判断是否为水仙花数:
if (sum == num) { cout << num << endl; }
如果立方和等于原数,则输出该数。
输出结果
运行上述代码,将会输出所有三位数的水仙花数,按从小到大的顺序:
153 370 371 407
这些数分别是 153、370、371 和 407,它们都是三位数的水仙花数。