1.问题描述
输入一个正整数n,然后输出从1到n之间的所有完全数。所谓完全数,就是一个正整数,它的所有真因子(除了它本身以外的因子)的和等于它本身。例如,6是一个完全数,因为
6=1+2+3
2.源代码
#include <stdio.h>
int main()
{
int n;
int i;
int j;
scanf("%d", &n);
for ( i = 1; i <= n; i++)
{
int sum = 0;
for ( j = 1; j < i; j++)
{
if (i % j == 0)
{
sum += j;
}
}
if (sum == i)
{
printf( "%d\n",i);
}
}
return 0;
}
3.代码思路
- 在main函数中,首先定义三个整数变量n,i,j。n用来存储输入的值,i用来遍历从1到n的所有数,j用来判断i是否为完全数。
- 使用scanf函数从标准输入读取n的值。
- 使用一个for循环,从1开始,每次加1,直到n,每次执行以下操作:
- 定义一个整数变量sum,用来存储i的所有真因子的和,初始值为0。
- 使用一个for循环,从1开始,每次加1,直到i-1,每次执行以下操作:
- 判断i是否能被j整除,如果是,说明j是i的一个真因子,就将j的值累加到sum中。
- 判断sum是否等于i,如果是,说明i是一个完全数,就使用printf函数输出i的值,并换行。
- 返回0,表示程序正常结束。