题目:一个数如果恰好等于它的因子之和,这个数被成为”完数”,例如:6=1+2+3.请编程找出1000以内的完数
首先根据题目,要求1000以内的完数,则需要定义一个变量 num 来表示1~1000
然后定义一个变量 i 用来表示因子,定义一个变量 sum 来表示因子相加的和;
原本代码如下:
#include <stdio.h>
int main() //错误代码
{
int num, sum, i;
for(num = 1; num <= 1000; num ++)
{
sum = 0;
for (i = 1; i <= num; i++) //出错位置, 因子 i 不能等于 num 自身
{
if (num % i == 0)
{
sum += i;
}
}
if(sum == num)
{
printf("%d", num);
}
}
return 0;
}
运行发现结果错误,只能输出1;
经检查发现,第二个 for 循环中,我错误地将数本身也当成因子,导致写出的程序出现错误;
正确代码如下:
#include <stdio.h>
int main()
{
int num, sum, i;
for(num = 1; num <= 1000; num ++)
{
sum = 0; //每次判断一个数都要将 sum 初始化为 0
for (i = 1; i < num; i++)
{
if (num % i == 0) //num 能被 i 整除,说明 i 是 num 的因子
{
sum += i; //累加因子
}
}
if(sum == num)
{
printf("%d", num);
}
}
return 0;
}
检查无误后运行,输出结果为:
6
28
496