C 练习实例19
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数",例如 6=1+2+3 ,请编程找出 1000 以内的所有完数。
程序分析:请参照:C 练习实例14。
实例
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include <stdio.h>
int main() {
int i, j, sum;
printf("1000以内的完数有:\n");
for (i = 1; i <= 1000; i++) {
sum = 0; // 每次循环前重置sum
// 找出i的所有真因子并求和
for (j = 1; j < i; j++) {
if (i % j == 0) {
sum += j;
}
}
// 如果和等于i本身,则是完数
if (sum == i) {
printf("%d = 1", i); // 所有完数都包含1
// 打印其他因子
for (j = 2; j < i; j++) {
if (i % j == 0) {
printf(" + %d", j);
}
}
printf("\n");
}
}
return 0;
}
以上实例输出结果为:
6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248