C 程序求解(完整的啊)

来源:百度知道 编辑:UC知道 时间:2024/05/29 22:46:24
如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。例如:6的因子为1,2,3,且1+2+3=6,因此6是一个“完数”。计算并输出1000以内的所有“完数”之和。
具体要求如下:所在地循环均用for循环。
输出要有文字说明,并同时输出各“完数”。输出形式为:完数1+完数2+。。。。=和值。
简单一点的啊,我是初学者啊,这有点深了啊,还有啊,我只学了,2个月啊,所以写的简单一些啊,并说明一下啊,那有没有再简单点的啊,如果没有那就去这个网站看一看,随便回答一下
http://zhidao.baidu.com/question/27059343.html

完整程序如下,已经测试通过:

#include <math.h>

/*检查一个数是否是完数 1 表示真,0表示假*/
int isWanShu( int num ){

int factorsSum = 1;/* 所有因子的和。1是任何数的因子,所以初始值为1*/
int i = 1;

if ( num == 1 )/*1不是完数*/
return 0;

/*因式分解*/
for ( i = 2; i <= sqrt(num); i++ ){
if ( num%i == 0 ){
factorsSum += i;
factorsSum += num/i;
}
}

if ( factorsSum == num )
return 1;

return 0;

}

main(){

int i = 2;
int sum = 0;

for ( i = 2; i <= 1000; i++ ){

if ( isWanShu(i) ){
sum += i;
if ( i == 6 ){/*6是第一个完数*/
printf("%d",i);
}else{
printf("+%d",i);
}
}

}

printf("=%d\n",sum);
}

补充回答:
这个已经是最简单的算法了,穷举法做的。主要思想分两步:
1、求出一个数的所有因子(穷举),看这些因子(不包括自己)的和是否等于这个数。
2、打印出 指定范围内的完数的和。