题目描述:
一个数如果恰好等于它的真因子之和,这个数就称为”完数”。 例如,6的真因子为1、2、3,而6=1+2+3,因此6是”完数”。 编程序找出N之内的所有完数,并按下面格式输出其真因子:
输入:
N
输出:
? its factors are ? ? ?
设计思路:
- 找出真因子
- 真因子加和
- 判断真因子之和与该数本身是否相等
- 若相等则为完数进行输出操作后接着判断下个数字
- 若不相等则跳过接着判断下个数字
注意:在每判断一个数字是否为完数时都必须将其加和的寄存器(sum)进行初始化,所以sum的初始化需放到循环体的内部。
源代码:
#include <stdio.h>
int main(void)
{
int N;
int n;
int i;
int sum;
scanf("%d", &N);
for (n = 1; n <= N; n++)
{
sum = 0;//每次都必须初始化
for (i = 1; i < n; i++)
{
if (n%i == 0)
sum += i;//因子加和
}
if (n == sum)
{
printf("%d its factore are ", n);
for (i = 1; i < n; i++)//输出因子
{
if (n%i == 0)
printf("%d ", i);
}
printf("\n");
}
}
}