c++迭代法输出水仙花数
时间: 2023-10-22 11:09:22 浏览: 119
水仙花数也被称为阿姆斯特朗数,是指一个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身。例如:$1^3 + 5^3 + 3^3 = 153$。
以下是使用迭代法输出水仙花数的 Python 代码示例:
```python
for num in range(100, 1000):
sum = 0
temp = num
while temp > 0:
digit = temp % 10
sum += digit ** 3
temp //= 10
if num == sum:
print(num)
```
输出结果为:
```
153
370
371
407
```
相关问题
7241 水仙花数c++
### 关于水仙花数的C++实现
水仙花数是一种特殊的三位整数,其每位数字的立方和等于该数本身。以下是基于提供的引用内容以及标准编程实践的一种完整的 C++ 实现方法。
#### 方法一:使用 `do-while` 循环
这种方法通过遍历所有的三位数来逐一验证它们是否满足水仙花数条件。代码结构清晰易懂:
```cpp
#include <iostream>
using namespace std;
int main() {
int num = 100;
do {
int a = 0; // 个位
int b = 0; // 十位
int c = 0; // 百位
a = num % 10; // 取个位
b = num / 10 % 10; // 取十位
c = num / 100; // 取百位
if (a * a * a + b * b * b + c * c * c == num) { // 判断是否为水仙花数
cout << num << endl;
}
num++;
} while (num < 1000);
system("pause");
return 0;
}
```
此代码片段展示了如何利用模运算提取每一位并计算其立方和[^1]。
---
#### 方法二:使用 `for` 循环
另一种常见的实现方式是采用 `for` 循环替代 `do-while` 结构,简化控制流程的同时保持功能一致:
```cpp
#include <iostream>
using namespace std;
int main() {
for (int i = 100; i < 1000; ++i) {
int a = i % 10; // 个位
int b = i / 10 % 10; // 十位
int c = i / 100; // 百位
if (a * a * a + b * b * b + c * c * c == i) { // 验证水仙花数条件
cout << i << endl;
}
}
system("pause");
return 0;
}
```
这段代码同样实现了对所有三位数的扫描,并输出符合条件的结果[^2]。
---
#### 方法三:分解法(嵌套循环)
为了进一步优化程序逻辑,可以考虑将三位数拆分为三个独立的部分——百位、十位和个位,分别由不同的循环变量表示。这种方式虽然稍显复杂,但在某些场景下可能更直观:
```cpp
#include <iostream>
using namespace std;
int main() {
for (int c = 1; c <= 9; ++c) { // 百位范围:1~9
for (int b = 0; b <= 9; ++b) { // 十位范围:0~9
for (int a = 0; a <= 9; ++a) { // 个位范围:0~9
int num = c * 100 + b * 10 + a;
if (a * a * a + b * b * b + c * c * c == num) { // 检查水仙花数
cout << num << endl;
}
}
}
}
system("pause");
return 0;
}
```
上述代码通过三层嵌套循环枚举了所有可能的情况,并有效减少了不必要的迭代次数[^4]。
---
### 总结
以上三种方法均能正确求解水仙花数问题,具体选择取决于个人偏好或实际需求。无论哪种方案,核心思路都是通过对三位数逐一分解并检验其立方和是否相等完成目标。
阅读全文
相关推荐












