C++ 寻找完全数:代码实现与解释
#include <iostream>
#include <vector>
using namespace std;
// 计算一个数的所有因子之和
int getFactorSum(int num) {
int sum = 0;
for (int i = 1; i <= num / 2; i++) {
if (num % i == 0) {
sum += i;
}
}
return sum;
}
int main() {
int n;
cin >> n;
vector<int> perfectNumbers; // 保存完全数的容器
for (int i = 2; i <= n; i++) {
if (getFactorSum(i) == i) { // 判断是否是完全数
perfectNumbers.push_back(i);
}
}
for (int i = 0; i < perfectNumbers.size(); i++) {
cout << perfectNumbers[i] << endl;
}
return 0;
}
代码解析:
getFactorSum(int num)函数: 该函数用于计算一个数num的所有因子之和。循环遍历从 1 到num/2的所有数,如果num能被i整除,则将i加到sum中。main()函数:- 读取用户输入的
n,表示要查找的范围上限。 - 创建一个
vector容器perfectNumbers,用于存储找到的完全数。 - 使用循环遍历 2 到
n之间的每个数,调用getFactorSum()函数计算每个数的因子之和。 - 如果一个数的因子之和等于它本身,则将其添加到
perfectNumbers容器中。 - 最后,循环遍历
perfectNumbers容器,将每个完全数输出到控制台。
- 读取用户输入的
代码示例:
输入:
7
输出:
6
解释:
6 的因子为 1, 2, 3,它们的和等于 6,所以 6 是一个完全数。
注意:
代码中使用 vector 容器存储完全数是为了方便后续操作,例如排序、查找等。
扩展:
可以通过修改代码来实现寻找更大的范围内的完全数,或者寻找更多类型的数,例如奇完全数等。
原文地址: https://www.cveoy.top/t/topic/qzev 著作权归作者所有。请勿转载和采集!