質問

だから見直します。でのみ表示0sとしての温度範囲お願い致します。

// 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主なくなったのはなぜだとお考えで必要とされることに、どのように 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変数の必要性はもはや存在します。

彼らは常に同じであるため、

また、別のlimitdivisor変数を維持する必要は、ありません。ただ、limitを削除し、divisorを使用するために、ループ条件を変更してください。

また、マーク・バイヤーズとしてあなたがforループではなく、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に保管されていることに注意してください(あなたはこの変数tempと呼ばれる)、数が正確な除数であるときにのみ増加されます。

あなたはそれが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