2016-04-09 6 views
-3

のない私は、プロジェクトオイラーの問題5を解決しようとしますが、プログラムがクラッシュし、私はすべてのエラーを得ることはありませんしたC++コンソールプログラムがクラッシュし、エラー

#include <stdio.h> 
#include <iostream> 

using namespace std; 

/* Problem 5: 
    2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. 
    What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? 
*/ 

int selle(int number) { 
    int c = 0; 

    for (int i = 0; i <= 20; i++) 
     if (number % i == 0) 
      c++; 

    return c; 
} 

int problem(int number) { 
    while (number > 0) { 

     if (selle(number) == 20) 
      return number; 

     number++; 
    } 

    return 404; 
} 

int main() { 
    long long number = 2; 

    cout << problem(number); 

    system("PAUSE"); 
    return 0; 
} 

私はこの問題は、「ため」であると思います最初の関数でループしますが、私はそれが何であるか分かりません。また、長い間関数を設定しようとすると、それが起こります。 ありがとうございます。

+0

ユークリッド最大公約数(GCD)の観点から定義された最小公倍数(LCM)関数を使用することが期待されます。 –

+0

FIY、Windowsでは、プログラムはエラーボックス "Stopped working"を生成します。昔は、ユーザーがビル・ゲイツにそれについて話すよう促していました。明らかに、彼はWindowsが解決策(人工知能、よろしく!)をチェックしていると言い、その後、プログラムをデバッグまたはクローズするように変更したので、彼のためにあまりにも多くの仕事を生み出したようです。 –

+1

フランスのgccから「Exception en point flottant」と伝えます! – jpo38

答えて

4
for (int i = 0; i <= 20; i++) 
    if (number % i == 0) 
     c++; 

iが0の場合(最初の反復)...ゼロで除算しています...これは許可されていません。

あなたのプログラムがクラッシュするのはそのためです。

+0

ああ、馬鹿なエラー。 –

+0

うれしい私は助けることができました。それがあなたの質問に答えたら、投票して答えを受け入れるべきです。 – jpo38

0

問題は、ある時点でnumber % 0を実行しているという問題です。ゼロ除算と同様に、ゼロによるモジュロも許可されません。モジュロ演算の第2オペランドが0の場合、未定義の動作(http://en.cppreference.com/w/cpp/language/operator_arithmetic)になります。

ところで、あなたはlong long number = 20;で始まり、20(number += 20;)単位で増分を実行できます。なぜなら、間に一致するものは見つからないからです。

関連する問題