2014-12-20 2 views
0

숫자를 얻는 함수를 작성해야하며 주어진 숫자보다 작은 모든 완벽한 숫자를 인쇄해야합니다. any가 없으면 해당 메시지가 인쇄됩니다. 방금 ​​작성한 프로그램은 잘 컴파일되지만 부분적으로 만 작동합니다. 예를 들어 입력 번호가 5 인 경우이 범위 (= 5까지)에 완벽한 숫자가 없다는 메시지가 표시되지 않습니다.완벽한 숫자를 검사하는 프로그램 - 뭔가 잘못되었습니다.

누군가이 프로그램에서 잘못된 점을 설명해 주시겠습니까? 나는 어떤 도움을 주셔서 감사하겠습니다!

#include<iostream> 

using namespace std; 
void check (int num, int & j); 
void main() 
{ 

int num,j, count; 

cout << "List all the perfect numbers less than: "; 
cin >> num; 

check (num, j); 
} 


void check (int num, int & j) 
{ 
    int i,sum, count=0; 
for(j=2;j<num;num++) 
{ 
    sum=0; 
    for(i=1;i<j;i++) 
    { 
     if(j%i == 0) 
     sum += i; 
    } 

    if(sum == j) 
    {cout << j <<endl; 
    count+=1; 
    } 
} 

if (count==0) 
    cout<<"there are no perfect numbers"<<endl; 
} 
+1

을해야한다고 생각 32 안쪽에 딱 맞는 5 완벽한 숫자가이 -bit'int'와 8 비트는 64 비트 내부에 들어 맞을 것이다. – Phylogenesis

+0

귀하의 의견을 주셔서 감사합니다,하지만 여전히 내 문제에 대답하지 않습니다 : ( – TOM1992

+1

왜'void check()'에 대한 참조로 초기화되지 않은'int j'를 전달합니까?'j = 2'를 체크하면 check 함수가 포함됩니다 void check() 내부에 재귀가없는 이유는 무엇입니까? –

답변

7

코드에서 무한 루프가 :

for(j=2;j<num;num++) 

I, 그것은 여담으로

for(j=2;j<num;j++) 
+0

그래도 문제가 해결되었지만 여전히 작동하지 않습니다 ..... – TOM1992

+0

작동하지 않는다는 것을 의미합니까, 테스트 할 수 있습니까? 예를 들어, – justmscs

+0

입력이 num = 4 인 경우,이 범위 (2에서 4까지)에 완벽한 숫자가 없다는 메시지가 표시되지만 출력에는 아무 것도 표시되지 않습니다. – TOM1992

관련 문제