2017-06-09 10 views
-2

コードライン "num ++"を "num + = 2520"に変更した場合、コードは正常に実行され、正しい答えが返されますが、なぜそれが実行されないのかを知りたいのですが、答えが見つかる前に2520の倍数でなければならないという事実を考えてください。なぜ私のコードがその変更なしで答えを正しく与えていないのかわかりません。私には、それは正しいようです。残念ながら、whileループは終了しません。プロジェクトオイラー#5 - なぜこのループは終了しませんか?

私は、要件が少しでも(9から8に)低下すると、whileループが終了するまで管理するため、正しい数字の長さと関係があります(232792560)。

long long int num = 1; 
    int div_counter = 1; 
    bool check = false; 

while(!check) 
{ 
    for(int i = 2; i < 21; i++) 
    { 
     if(num % i == 0) 
     { 
      div_counter++; 
     } 
    } 
    if(div_counter == 20) 
    { 
     check = true; 
    } 
    else 
    { 
     num++; 
     div_counter = 0; 
    } 
} 

return num; 
+0

これらの数字のLCMとしてこの番号を直接構成しないでください.GCDを使用して既に含まれている要素を見つけるのはなぜですか? – LutzL

+0

あなたは十分に長く待っていますか?たとえば、2520の変種が0.1秒で実行される場合、ステップ1の変種は252秒= 4.2分を必要とします。 10000の倍数であれば現在の 'num'をデバッグしようとしましたか? – LutzL

答えて

2

あなたは1代わりの0div_counterをリセットする必要があります。

あなたforループのみ2から包括的20に走るので、それが到達することができます0div_counter開始の最大値は19ある場合。

+0

あなたは正解でしたが、私は十分に長く待っていませんでした - それは結局私に正しい答えを与えました。どうもありがとうございます! –

関連する問題