如何编写1 C程序打印数字的所有因子,因子的总和,并检查它是否是一个完美的数字

时间:2016-04-05 07:38:58

标签: c sum factors perfect-numbers

我需要编写一个完成所有三件事的程序:打印所有因素,总结因子,并检查它是否是一个完美的数字。

我应该只使用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;
}

2 个答案:

答案 0 :(得分:2)

看看你声明f的位置,以及你第一次使用它的位置。大约一英里的距离。那很糟糕。

现在看看你声明总和的位置,以及你第一次使用它的位置。更糟。现在为什么你的代码不起作用:看你第二次使用&#34; sum&#34;首次。除了你没有。

通过将初始化与变量的实际使用相距甚远,你并没有让你的代码变得不可读,你实际上是通过使用相信当它没有&而且它具有零值的总和而自我击毙。 #39;吨。

答案 1 :(得分:1)

for (i = 0; i < n; i++) {
  statement;
}

可以写成:

i = 0;
while (i < n) {
  statement;
  i++;
}