在C语言中,输出完数可以通过以下几种方法实现:
方法一:使用嵌套循环遍历所有数字并计算因子和
```c
include
int main() {
int i, j, sum;
for (i = 1; i <= 1000; i++) {
sum = 0;
for (j = 1; j <= i / 2; j++) {
if (i % j == 0) {
sum += j;
}
}
if (sum == i) {
printf("%d ", i);
}
}
return 0;
}
```
方法二:定义函数判断完数并输出
```c
include
int isPerfectNumber(int num) {
int sum = 0;
for (int i = 1; i < num; i++) {
if (num % i == 0) {
sum += i;
}
}
return sum == num;
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
if (isPerfectNumber(num)) {
printf("%d 是完数。\n", num);
} else {
printf("%d 不是完数。\n", num);
}
return 0;
}
```
方法三:优化因子和计算
```c
include
int main() {
int i, j, k, n;
scanf("%d", &n);
for (i = 2; i <= n; i++) {
k = 0;
for (j = 1; j <= i / 2; j++) {
if (i % j == 0) {
k += j;
}
}
if (k == i) {
printf("%d\n", i);
}
}
return 0;
}
```
方法四:输出10000以内的完数
```c
include
int main() {
int n, sum, i;
for (n = 1; n <= 10000; n++) {
sum = 0;
for (i = 1; i <= n / 2; i++) {
if (n % i == 0) {
sum += i;
}
}
if (sum == n) {
printf("%d ", n);
}
}
return 0;
}
```
方法五:使用数组存储因子并输出
```c
include
int main() {
int i, j, n, s;
for (j = 2; j < 1000; j++) {
n = -1;
s = j;
for (i = 1; i < j; i++) {
if ((j % i) == 0) {
n++;
s = s - i;
if (s == 0) {
printf("%d is a perfect number: ", j);
for (int m = 0; m <= n; m++) {
printf("%d,", k[m]);
}
printf("%d\n", k[n]);
}
}
}
}
return 0;
}
```
建议
方法一和方法二是比较基础和常用的方法,适用于输出较小范围内的完数。
方法三是对方法一的优化,减少了内层循环的次数,适用于输出较大范围内的完数,但时间复杂度仍然较高。
方法四适用于输出10000以内的完数,效率较高。
方法五通过数组存储因子,输出格式较为清晰,但代码较为复杂。
根据实际需求选择合适的方法即可。