题解 | 完数与盈数

完数与盈数

https://www.nowcoder.com/practice/df0d850e41894d06a165bf445ec8a8b4

//完数和盈数
#include<cstdio>
#include<vector>
using namespace std;

//将一个数的因子都求出,若所有因子的和加起来等于该数,则是完数,否则就是盈数
//将提取因子和求和的过程单独写一个函数
int FactorSum(int i){   //参数为某个数,要对它的因子求和
    int res=0;  //初始和为0
    //遍历范围是1~(i-1)
    for(int j=1;j<i;j++){   //j从1开始,注意因子不包括本身
        if(i%j==0){ //若能够整除,则此时的j是因子
            res+=j; //将因子加入res
        }
    }
    return res; //返回因子的和
}

int main(){
    //创建两个动态数组,用于保存完数和盈数,初始两个动态数组都是空的
    vector<int> Evec;   //保存完数
    vector<int> Gvec;   //保存盈数

    //枚举2~60之间所有的整数
    for(int i=2;i<=60;i++){
        if(FactorSum(i)==i){    //因子和等于该数,是完数
            Evec.push_back(i);  //将数i放入动态数组Evec尾部
        }else if(FactorSum(i)>i){  //和更大,是盈数
            Gvec.push_back(i);
        }
    }

    //输出
    //用迭代器遍历数组
    vector<int>::iterator it;   //迭代器
    printf("E:");
    for(it=Evec.begin();it!=Evec.end();it++){   //打印完数
        printf(" %d",*it);
    }
    printf(" G: 2");	//为什么2是盈数,这里直接手搓了...
    for(it=Gvec.begin();it!=Gvec.end();it++){   //打印盈数
        printf(" %d",*it);
    }
    printf("\n");
    /*int size1=Evec.size();  //求出数组的长度
    int size2=Gvec.size();
    printf("E:");
    for(int i=0;i<size1;i++){
        printf("%d ",Evec[i]);
    }

    printf("G:");
    for(int i=0;i<size2;i++){
        printf("%d ",Gvec[i]);
    }
*/
    return 0;
}

全部评论

相关推荐

饼子吃到撑:学院本是这样的,找工作拼运气,你技术再好人家筛选学历照样沉入海底,海投就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务