完数VS盈数
题目描述
一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。
输入描述:
题目没有任何输入。
输出描述:
输出2到60之间所有“完数”和“盈数”,并以如下形式输出:
E: e1 e2 e3 ......(ei为完数)
G: g1 g2 g3 ......(gi为盈数)
其中两个数之间要有空格,行尾不加空格。
#include <iostream> #include <cstdio> #include <iomanip> #include <string> #include <cmath> //用setprecision(n)设置精度,其中n表示精确到小数点后n位 //解题的关键: //求出因数,并用一个数组来储存,后面处理 //不足:要用到很多的额外空间 using namespace std; int main() { int arr[30]; int arr1[10]; int arr2[10]; int index = 0; int index1 = 0; int index2= 0; int sum = 0; int num = 2; for (int num = 2; num < 61; num++) { for (int j = 1; j <num; j++) { if (num%j == 0) { arr[index++] = j; } } for (int i = 0; i < index; i++) { sum += arr[i]; } if (sum == num) { arr1[index1++] = num; } else if (sum>num) { arr2[index2++] = num; } index = 0; sum = 0; } cout << "E: "; for (int i = 0; i < index1; i++) { cout << arr1[i] ; if (i < index1 - 1) { cout << ' '; } } cout << endl; cout << "G: "; for (int i = 0; i < index2; i++) { cout << arr2[i]; if (i < index2 - 1) { cout << ' '; } } return 0; }