2016-10-30 2 views
-1

저는 여기에서 새로운 프로그래머입니다. 나는 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

뭔가 잘못 여기입니다 : 당신은 두 번 완벽한 숫자를 계산하고 있습니다. 'list_perfect'는'perfect'에 대한 호출을 수행하고 있다면'complete'를 호출합니다. –

+1

이것은 '무료 내 코드 디버그'가 아닙니다! –

+0

죄송합니다. – Mariner12

답변

1

완벽 수가 적절한 약수의 합과 동일하다. 예를 들어, 6은 완벽한 수이고 정수 1 + 2 + 3 = 6과 같습니다. 1은 모든 적절한 양의 정수 (그리고 음수 정수)의 공통 제수이므로 sum = 1을 입력하는 것이 좋습니다. sum = 0이 아닌 위의 정수 (int number) 함수 내에서 2. for 루프를 시작할 때처럼 시작해야한다. 나는 이것이 당신의 문제라고 생각한다. 코드를 변경하고 코드가 작동하는지 확인하십시오. 고맙습니다. 솔리 만.

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