2014-03-13 2 views
1

n1, n2 및 이 n1보다 큰지 확인하는 C++ 프로그램을 개발하는 방법을 궁금합니다. 그런 다음 프로그램은 n1n2 사이의 모든 완벽한 숫자를 결정합니다. 정수 (숫자 자체는 아님)를 포함하여 그 요인의 합이 숫자 자체와 같은 경우 정수를 완벽한 숫자라고합니다. 예를 들어, 6 = 1 + 2 + 3이기 때문에 6은 완벽한 숫자입니다. 지금까지 여기 완벽한 숫자 프로그램에서 논리적 오류

내가 가지고 올 것을, 그리고 그것은 어떤 런타임/구문 오류가없는,하지만 불행히도 논리적 오류 (들) :

#include <iostream> 
using namespace std; 

int main(){ 
    int number, sum = 0, divi = 1, n1, n2; 
    cout<<" Please enter n1: "; 
    cin>>n1; 
    cout<<" Please enter n2: "; 
    cin>>n2; 
    number = n1; 
    while(number <= n2){ 

     while(divi <=n2){ 

      if (number%divi ==0) 
       sum+=divi; 

      divi++; 
     } 

     if(sum == number) 
      cout<<number<<endl; 

     number++; 
    } 
    return 0;  
} 

는 난 단지 루프 동안 사용할 수 있습니다. 논리적 오류를 발견 할 수 있습니까?

+0

합계와 디비 각 번호 앞에 다시 초기화해야합니다. – user448810

답변

2
#include <iostream> 
using namespace std; 

int main(){ 
int number, sum = 0, divi = 1, n1, n2; 
cout<<" Please enter n1: "; 
cin>>n1; 
cout<<" Please enter n2: "; 
cin>>n2; 
number = n1; 
while(number <= n2){ 
    sum=0; // reintialize variable for every incrasing number n1 to n2 
    divi=1; // reintialize variable 
    while(divi <number){ //use number insteaed of n2 

     if (number%divi ==0) 
     { 
      sum+=divi; 
     } 
     divi++; 
    } 

    if(sum == number) 
     cout<<number<<endl; 

    number++; 
} 
return 0;  
} 
+1

내가 볼 수있는 것에 대한 답변이 많지 않습니다 ... 귀하의 게시물을 보는 사람들에게 분명하게 설명을 추가 할 수 있습니까? – 0x499602D2

+1

ok 젠체하는 사람이 있는데, 편집 할 수있는 것보다 더 놓친 게 있다면 –

+1

좋습니다.하지만 코드 자체를 게시하면 안됩니다. 변경 사항을 간략하게 요약하고 왜 도움을 주 었는지 항상 좋은 것입니다. – 0x499602D2

3
  1. 당신은 단지 라인 while(number <= n2){divi 0-1에와 sum를 재설정해야합니다. (그렇지 않으면 divisum이 오류가 발생합니다.)

  2. while에서 while(divi < number){까지의 상한을 재정의하십시오. (당신이하지 그 후, 1 number 사이의 요인을 검토합니다.)

관련 문제