编写一个C/C++程序,输入一个正整数N,输出从1到N(包含N)之间的完美数,输出之间以空格隔开,其中1<=N<2^31。 完美数是指一个数等于其所有真因子(不包括自身)的和。例如,6是一个完美数,因为其真因子为1、2、3,且1 + 2 + 3 = 6。
时间: 2024-10-25 08:16:49 浏览: 11
在C/C++中编写一个程序来找出指定范围内的完美数,你可以按照下面的步骤:
```cpp
#include <iostream>
#include <vector>
// 定义一个辅助函数用于计算给定数字的所有真因子
std::vector<int> find_divisors(int num) {
std::vector<int> divisors;
for (int i = 1; i * i <= num; ++i) {
if (num % i == 0) {
divisors.push_back(i);
if (i != num / i) { // 如果不是平方数,则添加另一个因子
divisors.push_back(num / i);
}
}
}
return divisors;
}
// 判断是否为完美数
bool is_perfect_number(int num) {
int sum = 0;
for (const auto& divisor : find_divisors(num)) {
if (divisor != num) {
sum += divisor;
}
}
return sum == num;
}
// 主函数,输入并处理完美数
int main() {
int N;
std::cout << "请输入一个正整数(1 <= N < 2^31): ";
std::cin >> N;
// 遍历并打印完美数
for (int i = 1; i <= N; ++i) {
if (is_perfect_number(i)) {
std::cout << i << " ";
}
}
return 0;
}
```
当你运行这个程序时,它会提示你输入一个正整数N,然后输出从1到N(包括N)之间的所有完美数,并用空格隔开。注意,这个程序不会检查N是否在指定范围内,为了保持简洁,可以在`main()`函数中加入对输入范围的验证。
阅读全文