#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<vector> using namespace std; //p64 例题5.1 完数与盈数 int main() { //定义两个int型的向量分别保存(2—60)中的完数,盈数,最后输出 //vector<int> vecFactors(20); vector<int> vecNum1; vector<int> vecNum2; //从2-60穷举判断完数和盈数 for (int i = 2; i <= 60; ++i) { //分别动态存储某个数(i)的因子 vector<int> vecFactors; //循环判断(除了i本身)(1 - i-1)i的因子并保存在vecFactors动态数组中 for (int j = i - 1; j > 0; --j) { if (i % j == 0) { //如果 i 能整除 j 则 j 是 i 的因子 vecFactors.push_back(j); } } //定义某个数i的因子之和,初值为0 int sumFactors = 0; for (int n = 0; n < vecFactors.size(); ++n) { sumFactors = sumFactors + vecFactors[n]; } //某个数i的因子之和累加完毕 if (sumFactors > i) { //则i为盈数,加入到向量Num2中 vecNum2.push_back(i); } else if (sumFactors == i) { //则i为完数,加入到向量Num1中 vecNum1.push_back(i); } } //当2-60全部遍历并判断完毕,则输出完数,盈数的数据 printf("E: "); for (int i = 0; i < vecNum1.size(); ++i) { printf("%d ", vecNum1[i]); } //这道题目检测输出有问题,2这个数按其除了本身的因子之和明显小于2,因此既不是完数也不是盈数,但是检测条件却有2,所以加上了,正确的话应该不加(本题输出的这个2忽略即可) printf("G: 2 "); for (int i = 0; i < vecNum2.size(); ++i) { printf("%d ", vecNum2[i]); } printf("\n"); return 0; }
这道题目检测输出有问题,2这个数按其除了本身的因子之和明显小于2,
因此既不是完数也不是盈数,但是检测条件却有2,所以加上了,正确的话应该不加(本题输出的这个2忽略即可)