C++한 완벽한 수입니다.도움이 필요하 개정
-
20-09-2019 - |
문제
도움이 필요해요 수정한다.그것은 유지를 표시 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;
}