题目
明确完数定义:如果一个数除它自身之外,它的所有的因子的和等于它本身,这个数即是完数。例如:6的因子有1,2, 3 ,6,除本身以外,6=1+2+3,所以6就是一个完数。现在要求输入一个指定数字,打印该数字以内所有的完数。
解析:
无论输入何数,1始终是个完数,所以直接输出不用考虑。这里要注意的是,在累加因子之和时,在每一次内循环开始前要将累加器sum重置为0,否则它将带着上一个外循环所得的因子之和进行下一次内循环而导致出错。
代码如下:
#include"stdio.h"
int main()
{
int i,j,sum;
long int n;
printf("请输入指定数字:\n");
scanf("%ld",&n);
printf("1 its factors are 1\n");
for(i=2;i<n;i++)
{
sum=0;//累加器重置(关键点)
for(j=1;j<i;j++)
if(i%j==0)
sum+=j;//累加该数字的所有因子
if(sum==i) //判断是否为完数
{
printf("%d its factors are ",i);
for(j=1;j<i;j++)
{
if(i%j==0)
printf("%d ",j);
}
printf("\n");
}
}
return 0;
}