2016-04-09 2 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; 
} 

Я думаю, что проблема в «для» цикл в первой функции, но я не знаю, что это такое. Также, пытаясь установить funcions на долгое время, это происходит. Спасибо.

+0

Я думаю, вы ожидаете использовать функцию наименьшего общего множественного числа (LCM), определенную в терминах Величайшего общего делителя Евклида (GCD). –

+0

FIY, в Windows программа выдает окно с ошибкой «Stopped working». В старые времена это использовало, чтобы побудить пользователя рассказать об этом Биллу Гейтсу. По-видимому, это создало для него слишком много работы, потому что теперь он говорит, что Windows проверяет решение (искусственный интеллект, yay!), А затем меняет, чтобы позволить мне отлаживать или закрывать программу. –

+1

Французский gcc говорит мне: «Исключительно флессант»! – jpo38

ответ

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

Когда i равен нулю (первая итерация) ... вы делите на ноль ... это не допускается.

Именно поэтому ваша программа рушится.

+0

О да, какая глупая ошибка. –

+0

Рад, что я мог помочь. Если это ответит на ваш вопрос, вы должны проголосовать и принять ответ. – jpo38

0

Проблема в том, что вы в какой-то момент выполняете number % 0. Подобно делению на ноль, по модулю нулем также не допускается. Если второй операнд в модульной операции равен 0, это приведет к неопределенному поведению (http://en.cppreference.com/w/cpp/language/operator_arithmetic).

Кстати, вы можете начать с long long number = 20; и выполнить приращение на 20 (number += 20;), потому что вы не найдете совпадений между ними.

Смежные вопросы