题目描述
一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。
输入描述:
题目没有任何输入。
输出描述:
输出2到60之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei为完数) G: g1 g2 g3 ......(gi为盈数) 其中两个数之间要有空格,行尾不加空格。
*判断是否满足条件 满足条件则存入队列
1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 #include <cstring> 5 #include <stack> 6 #include <cstdio> 7 #include <queue> 8 #include <vector> 9 using namespace std; 10 int deal(int x) 11 { 12 int sum=0; 13 for(int i=1;i<x;i++){ 14 if(x%i==0){ 15 sum+=i; 16 } 17 } 18 if(sum==x) return 1; 19 else if(sum>x) return 2; 20 else return 0; 21 } 22 int main() 23 { 24 queue<int> q1,q2; 25 for(int i=2;i<=60;i++){ 26 if(deal(i)==1) q1.push(i); 27 else if(deal(i)==2) q2.push(i); 28 } 29 cout<<"E:"; 30 while(q1.size()>0){ 31 cout<<" "<<q1.front(); 32 q1.pop(); 33 } 34 cout<<endl; 35 cout<<"G:"; 36 while(q2.size()>0){ 37 cout<<" "<<q2.front(); 38 q2.pop(); 39 } 40 return 0; 41 }