C语言输出1000以内等于其因子之和的“完数”

问题描述:如果一个数恰好等于它的因子之和, 就称这个数为“完数”。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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值