编写函数perfect_num(n),判断n是否为完全数
(完全数是指一个数除了自身的所有因子之和恰好等于本身)
例如:
28的因子有1,2,4,7,14,28,
除去28其余5个数之和为28,
所以28为完全数
C++实现如下:
#include <iostream>
using namespace std;
//声明一个返回布尔类型的函数
bool perfect_num(int x);
int main() {
//m,n起始数字;x当前检验的整数
int m, n, x;
cout << "input the range m, n: " << endl;
cin >> m >> n;
//从m到n依此筛选
for (x = m; x <= n; ++x) {
//使用函数,检查当前x是否符合条件
if (perfect_num(x)) {
cout << x << " ";
}
}
return 0;
}
bool perfect_num(int x) {
//初始化flag
bool flag = false;
//初始化所有因子之和
int sum = 0, i;
//遍历从1到x的所有整数
for (i = 1; i < x; ++i) {
//判断是否为因子
if (x % i == 0) {
sum += i;
}
}
//更新flag
flag = (sum == x);
return flag;
}
试题总结:
①特别简单的语句没有必要写成函数;
②灵活运用sum,反思:不使用数组储存所有因子的好处;
③函数的基础运用一定要熟练!