牛客网机试题-完数和盈数
程序员文章站
2024-03-21 20:21:10
...
题目描述:
一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。
输入描述:
牛客网没有给出。
输出描述
输出2到60之间所有“完数”和“盈数”,并以如下形式输出:
E: e1 e2 e3 …(ei为完数)
G: g1 g2 g3 …(gi为盈数)
其中两个数之间要有空格,行尾不加空格。
这里还是要求强调一下,千万别输出结果一样就可以了,一定要根据他们题目的格式来,如果输出的格式不一样,题目是不会通过的,而且会一直让你提交正确的结果。
下面就上代码,这里的代码是c的:
*/
#include <stdio.h>
int main()
{
int i;
int n;
int sum;
int E[100],G[100];//给定一个数组空间
int e = 0,g = 0;
for (n = 2; n < 61; n++)//根据要求对2~60个数进行遍利
{
sum = 0;//局部定义sum = 0;是保证没有运行结束之后都要对sum进行清0的操作
for ( i = 1; i< n; i++)
{
if (n % i == 0)
{
sum += i;//判断是不是完数,
}
}
if (sum == n)
{
E[e++] = n;//如果是就将其添加到数组中。
}
else if (sum > n)
{
G[g++] = n;
}
}
printf("E: ");
for (i = 0;i < e; i++)
{
printf("%d",E[i]);
if (i != (e - 1)) //每输出一个不相同的进行添加一个空格
printf(" ");
}
printf(" ");
printf("G: ");
for ( i = 0; i < g; i++)
{
printf("%d", G[i]);
if (i != (g - 1))
printf(" ");
}
return 0;
}
到这里代码就结束了,大家可以验证一下。