문제

도움이 필요해요 수정한다.그것은 유지를 표시 0 으로 temp.감사합니다.

// A program to determine whether the input number is a perfect number
// A perfect number is defined by the sum of all its positive divisors excluding itself
// 28: 1+2+3+7+14 = 28. 

int perfect, limit, divisor;

cout << "Please enter a positive integer in order to define whether it is a perfect integer or not: " ;
 cin >> perfect;
 cout << endl;

 int temp = 0;
 int prevtemp = 0;
  limit = 1;
  divisor = 1;
 while (limit < perfect)
 {

  if ((perfect % divisor) == 0)
   {
   divisor = prevtemp;
   temp = prevtemp + temp;
   }

  limit++;
  divisor++;
 }

 if (perfect == temp)
  cout << "Your number is a perfect number!" << endl;
 else
  cout << "Your number is not a perfect number" << endl;

 return 0;
도움이 되었습니까?

해결책

나는 확실하지 않지만,나는 추측에서 코드:

if ((perfect % divisor) == 0)
    divisor = prevtemp;

당신이 의도한 이야 prevtemp=divisor 대신 합니다.수정하는 명백한 문제이지만,여전히 아주 조금처럼 보이지 않는 그것의 일을 하는 당신은 아마 것입니다.예를 들어,나는 매우 알 수없는 무엇인 limit 도 수행--를 초기화하고 늘 그것은,그러나 멀리로 나가 볼 수 있습니다,당신은 결코 그 값(아,나는 당신이 그것을 사용하지만,그 값은 항상 동일 divisor's 그래서 나는 확실하지 않다고 생각하는 이유는 당신 모두 필요,또는 어떻게 limit 어떤 의미로 그것의 이름).

편집:것은 의미가 있을 limit.특히,요인은 항상에서 쌍:중 하나는보다 작거나 같은 사각형 뿌리의 숫자 중 하나에 일치하는 첫 번째는 항상보다 크거나 같은 사각형 뿌리의 숫자입니다.이와 같이,당신이 필요하지 않 검사는 모든 방법을 자리를 찾고를 위한 요인-당신은 설정할 수 있습니다 숫자의 제곱근 제한,그리고만 검사하는 점이다.에 대한 각각의 요소를 발견하는 시점이 일치하는 요인이 될 것입니다 perfect/divisor.이후 이미 받으신 하나 작동이,예를 내가할 수 있습니다 희망이 없 숙제를 하고,후 예를 들어뿐만 아니라:

bool is_perfect(int number) { 
    int limit = sqrt((double)number);
    int sum = 1;

    for (int i=2; i<=limit; i++)
        if (number % i == 0) 
            sum += i + number/i;
    return sum == number;
}

다른 팁

당신은 결코 설정하지 않습니다 prevtemp 0이 아닌 다른 것에 대해 추가하십시오. temp 아무것도하지 않습니다.

나는 당신이 말하려고한다고 믿습니다

if ((perfect % divisor) == 0) 
    temp += divisor; // not "divisor = prevtemp;"

이 솔루션으로 "temp = prevtemp + temp"라인도 제거해야합니다. 더 이상 필요가 없습니다 prevtemp 변하기 쉬운.

또한 별도의 상태를 유지할 필요가 없습니다 limit 그리고 divisor 변수는 항상 동일하기 때문입니다. 그냥 제거하십시오 limit 사용하도록 루프 조건을 변경하십시오 divisor.

또한 Mark Byers가 지적했듯이, 루프는 당신이 그것을 for a가 아닌 루프 while.

너무 복잡하게 만드는 것 같습니다. 어떻게 할 수 있는지 다음과 같습니다.

int total = 0;
for (int i = 1; i < perfect; ++i)
{
    if (perfect % i == 0)
        total += i;
}

if (perfect == total)
    cout << "Your number is a perfect number!" << endl;
else
    cout << "Your number is not a perfect number" << endl;

실행 금액은 호출되는 변수로 유지됩니다. total (이 가변 온도라고 불렀으며 숫자가 정확한 제수 일 때만 증가합니다.

당신은 아무것도 할당하지 않습니다 prevtemp 초기화 후 0, 따라서 추가 할 것이 없습니다 temp 읽는 줄에 temp = prevtemp + temp.

#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    int n,i=1,sum=0;
    cout<<"Enter a number: ";
    cin >> n;
    while(i<n){
        if(n%i==0)
            sum=sum+i;
        i++;
    }
    if(sum==n)
         cout << i  <<  " is a perfect number";
    else
         cout << i << " is not a perfect number";
    system("pause");
    return 0; 
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top