问题描述:如果一个数恰好等于它的因子之和, 就称这个数为“完数”。ep:6=1+2+3。现要输出1000之内的所有“完数”,且格式要求为:X=y1+y2+y3......(规定1不为“完数”)
思路就是对6到1000中的每一个数,历遍其所有因子,再检测之和。
代码如下:
#include<stdio.h>
#define MAX_SIZE 1000
int main()
{
int i,j,k,b[MAX_SIZE],num=0;//定义数组b来存放因子,数num来表示和
for (i = 6; i <= 1000; i++)
{
k = 0;
for (j = 1; j <= i / 2; j++)
if (i % j == 0) //整除判断因子
{
b[k] = j; //因子存入数组b
k++;
num += j; //数值加入num
}
if (i == num) //符合“完数”条件,输出
{
printf("%d=", i);
for (j = 0; j <= k - 2; j++)
{
printf("%d+", b[j]);
if (j == k - 2)
printf("%d\n", b[k - 1]);
} //注意格式要求,最后一项没有加号,并换行
}
num = 0; //一次循环结束,要将num归0
}
return 0;
}
输出:
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248