使用函数和预设代码查找完美数字

时间:2016-10-30 08:05:36

标签: c

我在这里是一个新的程序员。我正在尝试编写一个程序,打印1-10,000范围内的完美数字,并列出所有可被完美数字整除的数字。我得到了一个预设的代码,底部是我现在拥有的。我做错了什么(禁止任何语法)?

#include <stdio.h>  
int perfect(int); 
void list_perfect(int);
int main() {
    int i;     
    for (i=2; i<10000; i++) {
        if (perfect(i)) {
            list_perfect(i);
        }
    return 0;
}


int perfect(int number) {
}
void list_perfect(int number) {    
}

当前代码:

#include <stdio.h>
int perfect(int);
void list_perfect(int);
int main() {
    int i;
    for (i=2; i<10000; i++) {
        if (perfect(i)) {                 
            printf("These are the perfect numbers:\n");
            list_perfect(i);
        }
    }
    return 0;
}

int perfect(int number) { 
    int sum;
    int k;
    sum = 0;
    for (k=2; k<number; k++) {
        if(number%k==0) {
            sum += k;
        }
    }
    if(sum == number)
        return sum;
    else
        return 0;
    }
}

void list_perfect(int number) {
    if(perfect(number)) {
        printf("%d", number);
    }
}

2 个答案:

答案 0 :(得分:1)

完美数字等于其适当除数的总和。例如,6是一个完整数,并且等于整数1 + 2 + 3 = 6.因为1是所有正整数的公约数(也是负数),我建议你把sum = 1;在你的int完美(int数字)函数里面不是sum = 0开始的,因为你开始你的for循环2.我猜这是你的问题。请进行更改,看看您的代码是否有效。谢谢。索利曼。

答案 1 :(得分:0)

主要问题是这一行:

for (k=2; k<number; k++) {

你需要从1开始,所以它应该是

for (k=1; k<number; k++) {

为了获得更好的表现,您可以这样做:

for (k=1; k <= number/2; k++) {

除此之外,你不应该两次调用perfect函数。所以改变这个:

void list_perfect(int number) {
    if(perfect(number)) {
        printf("%d", number);
    }
}

只是打印:

void list_perfect(int number) {
    printf("%d ", number);
}

同样更正:

if(sum == number)
    return sum;
else
    return 0;
}  <-------------------- Delete this line