题解 | #完数VS盈数#
完数VS盈数
https://www.nowcoder.com/practice/ccc3d1e78014486fb7eed3c50e05c99d
//描述 //一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”; //若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 //输入描述: //题目没有任何输入。 //输出描述: //输出2到60之间所有“完数”和“盈数”,并以如下形式输出: //E: e1 e2 e3 ......(ei为完数) G: g1 g2 g3 ......(gi为盈数) //其中两个数之间要有空格,行尾不加空格。 #include <iostream> #include <cstdio> #include <string> #include <vector> #include <algorithm> using namespace std; int Sum(int i){ int sum=0; for(int j=1;j<i;++j){ if(i%j==0){ sum = sum + j; } } return sum; } int main(){ vector<int> Evec;//完数 vector<int> Gvec;//盈数 for(int i=2;i<=60;++i){ if(i == Sum(i)){ Evec.push_back(i); } else if(i < Sum(i)){ Gvec.push_back(i); } } printf("E:"); for(unsigned i = 0;i <Evec.size();++i){ printf(" %d",Evec[i]); } printf("\n"); printf("G:"); for(unsigned i = 0;i <Gvec.size();++i){ printf(" %d",Gvec[i]); } printf("\n"); }