题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1,2,3
因此分析题目:
1,首先题目给出了完数的定义(紫色标记的句子),因此可以根据这个去设计程序。
2,然后限制条件是1000之内的所有完数(红色标记的句子)
3,因此可以运用循环去解决这个问题
小知识 循环结构有
(1)while(循环条件)执行语句;
(2)for(初始条件;循环条件;执行部分结束后,执行一遍的语句)执行语句;
(3)do 执行语句 while (循环条件);
注:do while是先执行一遍do在判断,而while是先判断再执行,最大的区别就是do while比while执行多了一遍语句
4,上面题目绿色的6就是我们要求的完数这个是要控制格式输出的,黄色的its factors are是字符串直接就可以输出的,蓝色的1,2,3就是用一次循环去求出来的。
思路说完,下面就是代码,代码的基本上意思在后面打上的注释可以放心使用。
#include <stdio.h>
int main()
{
int a=1, b=1,sum=0;
for (a = 1; a <= 1000; a++, sum = 0) //用a去控制外层变量,并且记得要初始化sum
{ //如果不初始化sum就会出现一直加下去的现象出不了结果
for (b = 1; b < a; b++) //内层循环解决找因子的问题
{
if (a%b == 0) //判断是不是因数如果是就用sum统计起来
sum = sum + b;
}
/*printf("%d\n",sum);*/ //这个打印是验证sum的,可以把上面的sum=0去掉看看会有什么结果
if (a == sum) //如果是完数就统计出来
{
printf("%d its factors are ", a);
for (int i = sum - 1; i > 0; i--) //将完数和其因子打印出来
if (sum%i == 0)
printf("%d,",i);
printf("\n");
}
}
return 0;
}
因为我也是一名学生可能有的地方有所疏漏,如果找到了请帮我指出来,谢谢各位!!!