1017 - C语言程序设计教程(第三版)课后习题6.7
时间限制:10秒
内存限制:128兆
题目描述
一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子:
输入
N
输出
? its factors are ? ? ?
样例输入
1000
样例输出
6 its factors are 1 2 3
28 its factors are 1 2 4 7 14
496 its factors are 1 2 4 8 16 31 62 124 248
判断一个数是否是另一个数的因子使用%符号就可以解决,使用两层for循环
对因子的总和进行相加判断是否是完数并不是什么问题,很多小伙伴会卡在
怎么输出所有因子上,其实这种情况很好解决,将判断因子的方法再一次使
用一遍,如果是因子,直接输出即可 ,记得在一次完数判断结束之后将因子
和归零,方便下一次的完数判断
#include<stdio.h>
int main()
{
int N, i, j, b, a;
a=0;
scanf("%d",&N);
for(i=2;i<=N;i++)
{
for ( int j = 1; j <i; j++ )
if ( i % j == 0 ) //判断一个数的所有因子
a = a + j; //将因子相加
if(a==i) //判断是否为完数
{
printf( "%d its factors are ", i );
for(b=1;b<i;b++)
{
if ( i % b == 0 )
printf("%d ",b); //输出完数所有的因子
}
printf("\n");
}
a=0; //对因子和进行初始化,为下一次的完数判断做准备
}
return 0;
}