定义一个数 n,要求输出1~n 之间的所有的完数。
Sample Input:100
5000
Sample Output:100:6 28
5000:6 28 496
所谓“完数”是指一个数恰好等于它的所有不同因子之和。例如,6是完数,因为6=1+2+3。而24不是完数,因为24≠1+2+3+4+6+8+12=36。
思路:先判断一个正整数的因子,若是因子,则求和,再将所求得的和与该正整数作比较,相等则是完数;
下面是用C++写的程序,这里用到了vector容器来存放输入的数,用迭代器输出。
完整代码:
#include
#include
#include
#include
using namespace std;
int main()
{
int n;
int sum;
int a[100];
int j = 0;
vector
v1; while(cin >> n) { v1.push_back(n); } for(vector
::iterator it=v1.begin(); it!=v1.end(); it++) { cout << *it << ": "; for(int m = 1; m <= *it; m++) //遍历输入的数 n 之前所有的数 { sum = 0; //判断是否为因子 for(int i=1; i<=m/2; i++) { if(m % i == 0) { sum = sum + i; //是该数的因子,则求和 } } //判断是否是完数 if(sum == m) { cout << m << " "; } } cout << endl; } return 0; }