C语言之基本算法38—格式化输出10000以内的全部完数

本文介绍了一个使用C语言编写的程序,该程序采用穷举法寻找10000以内的所有完数,并按指定格式输出每个完数及其因子。完数是指一个正整数等于其所有真因子(不包括自身)之和。
//穷举法!
/*
==================================================================
题目:求10000以内的全部完数,统计数量并以例如以下格式输出:
28=1+2+4+7+14.
注:完数是除了本身外。其值等于包括1的全部因子之和!
如:28的全部因子是:1,2,4,7,28,除了28外其他因子的和=28,故28是完数!
==================================================================
*/
#include<stdio.h>
#define N 10000
int ws(int a)
{
int i=1;
int sum=0;
while(i<a)        //不包括a,由于完数的因子必须小于它本身!
{
if(a%i==0)
sum+=i;
i++;
}
if(sum==a)
return 1;
else return 0;
}
void main()
{
int n=2,i,j,k=0,a[100],shu=0;
printf("%d以内的完数有:",N);
while(n<=N)
{
if(ws(n))
{
for(i=1;i<n;i++)
if(n%i==0)
a[k++]=i;
printf("\n%d:  %-4d=%d",shu+1,n,a[0]);
for(j=1;j<k;j++)
printf("+%d ",a[j]);
printf(".\n");
shu++;
k=0;
}
n++;
}
printf("\n一共%d个",shu);
printf("\n");
}
/*
======================================================================
评:
这道题难点在于输出的格式,完数的推断是一个简单问题,甚至能够用for循环来
实现!

可是要输出题目要求的格式。就必须先求出其全部因子,保存在预先定义的
数组中,先输出n=a[0],紧接着通过for循环输出其余的+因子。在输出"."。


必须注意要一个一个输出,就是推断+输出+又一次初始化后在算下一个n。直到n>N循
环结束(注意不能用for循环。否则会反复输出N次)。


========================================================================
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值