/*一个数如果恰好等于它的各因子(该数本身除外)子和,
如:6=3+2+1,则称其为"完数";若因子之和大于该数,则
称其为"盈数"。
求出2到60之间所有"完数"和"盈数",并以如下形式输出?
E: e1 e2 e3 ......(ei为完数) G: g1 g2 g3 ......(gi为盈数)
*/
#include <stdio.h>
#define max 60
int input(int n) //每一个输入数据的因数和
{
int m, sum = 0;
for(m = 1; m < n; m++)
{
if(n%m == 0)
sum += m;
}
return sum;
}
void main()
{
int data; //输入判断的数据
int t, i = 0, j = 0; //因数和t,i和j为循环变量
int w[max], y[max]; //所求的数组
for(data = 2; data <= 60; data++)
{
t = input(data);
if(t > data) //判断赢数
{
w[i] = data;
i++;
}
if(t == data) //判断完数
{
y[j] = data;
j++;
}
}
printf("print wanshu:\n");
i--;
for(; i >= 0; i--)
{
printf("w:%d\n",w[i]); //输出完数
}
printf("print yingshu:\n");
j--;
for(; j >= 0; j--)
{
printf("y:%d\n",y[j]); //输出赢数
}
}
//此程序通过vc6.0调试通过