编写一个函数,判断一个数是否是完数并编写一个简单的程序测试该函数的正确性。
时间: 2024-02-24 16:53:12 浏览: 63
可以使用以下的函数来判断一个数是否是完数:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 判断一个数是否是完数
bool isPerfectNum(int num)
{
if (num <= 0) {
return false; // 非正整数不是完数
}
vector<int> factors; // 存放num的所有因子
int sum = 0; // 存放因子之和
for (int i = 1; i < num; i++) {
if (num % i == 0) {
factors.push_back(i);
sum += i;
}
}
if (sum == num) {
cout << num << "的因子为:";
for (int i = 0; i < factors.size(); i++) {
cout << factors[i] << " ";
}
cout << endl;
return true; // 因子之和等于num本身,是完数
} else {
return false; // 否则不是完数
}
}
// 测试函数
int main()
{
cout << "6: " << (isPerfectNum(6) ? "是完数" : "不是完数") << endl;
cout << "8: " << (isPerfectNum(8) ? "是完数" : "不是完数") << endl;
cout << "28: " << (isPerfectNum(28) ? "是完数" : "不是完数") << endl;
cout << "496: " << (isPerfectNum(496) ? "是完数" : "不是完数") << endl;
cout << "8128: " << (isPerfectNum(8128) ? "是完数" : "不是完数") << endl;
cout << "0: " << (isPerfectNum(0) ? "是完数" : "不是完数") << endl;
cout << "-6: " << (isPerfectNum(-6) ? "是完数" : "不是完数") << endl;
return 0;
}
```
这个函数首先判断输入的num是否是正整数,如果不是则直接返回false。接着,使用for循环遍历1到num-1之间的每一个数,如果它是num的因子,就把它加到vector容器factors中,并把它加到sum中。最后,如果sum等于num,就输出num的所有因子,然后返回真(即num是完数),否则返回假(即num不是完数)。
在测试函数中,我们分别测试了6、8、28、496、8128、0和-6这几个数是否是完数,输出相应的结果。如果函数实现正确,输出结果应该是:
```
6的因子为:1 2 3
6: 是完数
8: 不是完数
28的因子为:1 2 4 7 14
28: 是完数
496的因子为:1 2 4 8 16 31 62 124 248
496: 是完数
8128的因子为:1 2 4 8 16 32 64 127 254 508 1016 2032 4064
8128: 是完数
0: 不是完数
-6: 不是完数
```
阅读全文
相关推荐














