Description 水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153) Input 本题有多个测试点,每个测试点包含一个正整数n,满足3<= n <=10 Output 对于每个测试点,输出所有n位水仙花数。
时间: 2023-12-23 07:04:30 浏览: 121
根据题目描述,我们可以先写一个求一个数的每个位数的 n 次方之和的函数,然后再在主函数中遍历所有 n 位数,对每个数判断它是否是水仙花数,如果是,就输出。
以下是 C++ 代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 求一个数的每个位数的n次方之和
int sum(int num, int n) {
int res = 0;
while (num > 0) {
int digit = num % 10;
res += pow(digit, n);
num /= 10;
}
return res;
}
int main() {
int n;
while (cin >> n) {
int start = pow(10, n - 1);
int end = pow(10, n);
for (int i = start; i < end; i++) {
if (sum(i, n) == i) {
cout << i << " ";
}
}
cout << endl;
}
return 0;
}
```
我们先读入 n,然后得到所有 n 位数的范围,即从 $10^{n-1}$ 到 $10^n-1$ 。接着遍历这个范围内的每个数,对每个数调用 sum 函数求出其每个位数的 n 次方之和,如果等于该数本身,则输出这个数。
阅读全文