我需要编写一个完成所有三件事的程序:打印所有因素,总结因子,并检查它是否是一个完美的数字。
我应该只使用while循环,但我无法让它工作,所以我使用了一些For循环。除此之外,我遇到的主要问题是让程序检查数字是否完美。
例如,我输入'6',它给出了因子1,2,3,6,总和= 12,但程序认为'6'不是一个完美的数字。请查看我的代码,看看我哪里出错了。
#include <stdio.h>
int main(void) {
int n, f, sum;
f = 1;
sum = 0;
printf("Enter number: ");
scanf("%d", &n);
printf("The factors of %d are:\n", n);
//Finding the factors of the given number
while (f <= n) {
if (n % f == 0) {
printf("%d\n", f);
}
f++; //f++ is the same as f = f + 1
}
//Finding the sum of the factors
for (f = 1; f <= n; f++) {
if (n % f == 0) {
sum = sum + f;
}
}
printf("Sum of factors = %d\n", sum);
//Checking if the number is perfect or not; A number is considered perfect if the sum of it's divisiors equal the number eg 6 = 1+2+3
for (f = 1; f < n; f++) {
if (n % f == 0) {
sum = sum + f;
}
}
if (sum == n) {
printf("%d is a perfect number\n", n);
} else {
printf("%d is not a perfect number\n", n);
}
return 0;
}
答案 0 :(得分:2)
看看你声明f的位置,以及你第一次使用它的位置。大约一英里的距离。那很糟糕。
现在看看你声明总和的位置,以及你第一次使用它的位置。更糟。现在为什么你的代码不起作用:看你第二次使用&#34; sum&#34;首次。除了你没有。
通过将初始化与变量的实际使用相距甚远,你并没有让你的代码变得不可读,你实际上是通过使用相信当它没有&而且它具有零值的总和而自我击毙。 #39;吨。
答案 1 :(得分:1)
for (i = 0; i < n; i++) {
statement;
}
可以写成:
i = 0;
while (i < n) {
statement;
i++;
}