题目
一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
分析
循环出2-1000的所有数,查找每一个数的因子,组成因子之和。将因子这和对比原数。
代码
#include <stdio.h>
/*
一个数如果恰好等于它的因子之和,
这个数就称为"完数"。例如6=1+2+3.
编程找出1000以内的所有完数。
*/
int main(){
int i,j,k=0;
for(i=2;i<=1000;i++,k=0){
for(j=1;j<i;j++)
if(i%j==0) k+=j;
if(k==i)
printf("%d\n",i);
}
}
代码解析
-
包含标准输入输出头文件
#include <stdio.h>
。 -
定义
main
函数,程序的入口点。 -
声明三个整型变量
i
、j
、k
,其中i
用于遍历1到1000的整数,j
用于寻找i
的因子,k
用于累加i
的因子之和。 -
使用
for
循环,从2遍历到1000(包含1000),因为1不是完数。 -
在每次外层循环开始时,将
k
重置为0,以准备计算当前数i
的因子之和。 -
使用内部
for
循环,从1遍历到i-1
,查找i
的所有因子。 -
对于内部循环中的每个
j
,如果i
能被j
整除(即i % j == 0
),则将j
累加到k
中。 -
内部循环结束后,检查
k
是否等于i
。如果相等,说明i
是一个完数,于是使用printf
函数打印出i
。 -
外层循环继续执行,直到遍历完所有1000以内的整数。