исключение — неожиданное исключение с плавающей точкой

Эта программа предназначена для вычисления наименьшего общего кратного. Это не представляет деление на ноль, ни странные операции (насколько я знаю), но в какой-то момент оно ломается.
Кажется, программа возвращается "Floating point exception (core dumped)" для любой пары значений.
* Условие: a> = 1 и b> = 1.
Код:

int mcd(int x, int y) { //computes greatest common divisor
if (x == 0) return y;
return mcd(y, x % y);
}

int mcm(int x, int y) { //computes smallest common multiple
return x * y / mcd(x, y);
}

int main() {
int a, b;
int counter = 0;
while (cin >> a >> b) {
++counter;
cout << "#" << counter
<< " : " << mcm(a, b) << endl;
}
}

Что вызывает это поведение?

1

Решение

Вы делитесь на ноль, потому что ваше условие остановки в строке 2 неверно. Правильный это:

if (y == 0) return x;

Источник: Евклидов алгоритм

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]