/*
题目描述:
一个数如果恰好等于它的各因子(该数本身除外)之和,如:6=3+2+1,则称其为“完数”;
若因子之和大于该数,则称其为“盈数”。求出2 到60 之间所有“完数”和“盈数”,
并以如下形式输出: E: e1 e2 e3 ......(ei 为完数) G: g1 g2 g3 ......(gi 为盈数)
输入描述:
无
输出描述:
按描述要求输出(注意EG后面的冒号之后有一个空格)。
*/
#include <stdio.h>
int main(){
int a[60],b[60]; //定义两个整型数组分别用来存储2到60之间的所有完数和盈数
int p1=0,p2=0; //p1,p2为两个数组的下标
for(int i=2;i<=60;i++){ //遍历2到60之间的所有数
int sum=0; //初始化各因子和为0
for(int j=1;j<i;j++){ //从1开始对该数进行遍历
if(i%j==0) //若该数能整除j,则表示j是该数的因子
sum+=j; //加上因子
}
if(sum==i) //若因子和与该数一致
a[p1++]=i; //该数作为完数数组的元素放入,数组下标自增
else if(sum>i) //若因子和大于该数
b[p2++]=i; //该数作为盈数数组的元素放入,数组下标自增
}
printf("E:");
for(int i=0;i<p1;i++) //遍历完数数组并打印出所有的元素
printf(" %d",a[i]);
printf(" G:");
for(int j=0;j<p2;j++) //遍历盈数数组并打印出所有的元素
printf(" %d",b[j]);
return 0;
}
6-24 完数和盈数
最新推荐文章于 2021-03-08 11:08:52 发布