题目
一个数字刚好等于它的因数之和,被称之为完数。编程序找出1000之内的所有完数,并按照下列形式输出因子:
6 its factors are 1, 2, 3
解题思路
先找出完数,其次再找出它的因子
注释给的很清晰,可以看看👀
答案如下:
int PerNum(int num) {
int sum = 0;
for (int i = 1; i < num; i++) { //此循环和下面的return两个加起来可以找到完数
if (num % i == 0) { //num和主函数中的n等价
sum += i; //得出sum的值用于下面判断是否正确
}
}
return sum == num; //此处验证sum与num(主函数中的n)是否相等,若不相等,下面的if会将其排除
}
int main(void) {
printf("1000以内的完数有:\n");
for (int n = 1; n <= 1000; n++) {
if (PerNum(n)) { //如果里面的函数不成立的话就不进行下一步啦
printf("%d 的因子是:", n);
for (int i = 1; i < n; i++) { //这里是寻找n的因数并输出,注意这里i要小于n
if (n % i == 0) {
printf("%d ", i); //如果取余为0证明就是它的因子,输出就行
}
}
printf("\n"); //这里换行会使运行结果更加美观
}
}
return 0;
}
我认为难点还是在PerNum这个函数里面,感觉有点绕,多琢磨琢磨吧。