НОД

  • 8
  • Недоступна
Продолжаем наши попытки войти в космическое пространство планеты Линейный Хаос. И вот ещё одно задание с приграничного собеседования для юных поступающих: найти наибольший общий делитель (или НОД) двух целых положительных чисел.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (137)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Dr Evil15 уровень, Киев
позавчера, 15:37
Сделал таким образом: 1) Создаем 2 переменные, для ввода чисел 2) Создаем один if с параметрами (если х меньше или равно 0 или у меньше или равно 0) то { кидаем исключение: throw new IllegalArgumentException("Only positive numbers allowed"); } 3) Создаем else { System.out.println(gcd(x, y)); } - где "gcd()" это метод ниже. 4) Для вычисления НОД нашел вот такое решение здесь.
private static int gcd(int a, int b) {
        return BigInteger.valueOf(a).gcd(BigInteger.valueOf(b)).intValue();
}
Алексей15 уровень
вчера, 07:20
А я циклами все сделал. Получилась серьезная программа, не то что эти 4 строчки. )))
DenisKa15 уровень, Екатеринбург
четверг, 07:31
https://habr.com/ru/post/205106/ Не благодарите
Илья17 уровень, Санкт-Петербург
5 марта, 20:21
Очень понравилась задача, про алгоритм Евклида хорошо написано, например, тут. С циклом while и нахождением нода делением по мне так получается очень элегантно и эффективно. p.s. не знаю какие проблемы у людей с валидатором, условие написано очень четко "В случае если введенные строки невозможно преобразовать в положительные целые числа, должно возникать исключение." Для начала мы делаем Integer.parseInt - тут исключение само выпадет, если будет не число в строке. Далее мы делаем проверку, меньше ли одно из чисел единицы (0 не относится к целым положительным числам), если да, выбрасываем исключение:
if (a < 1 || b < 1) throw new Exception();
Iuri Ostrikov28 уровень
5 марта, 00:23
Смотрю многие тут изобретают велосипеды. До решения задачи, советую прочитать данную статью Нахождение наибольшего общего делителя
vapima16 уровень, Москва
4 марта, 13:48
https://habr.com/ru/post/205106/
NewBuy16 уровень, Санкт-Петербург
2 марта, 08:05
Вопрос к составителям задачи? А почему это отрицательное число нельзя преобразовать в положительное??? Написал код, в котором, если введено отрицательное число, то берется его модуль, и считается задача, но в итоге 6 попыток из-за этой фигни. Вот в чем неадекватность ТЗ
Александр19 уровень, Казань
18 февраля, 09:26
Убрал try-catch прошел проверку )
Сергей17 уровень, Киев
13 февраля, 21:27
мдя... Действительно, ведь по условию и требованию нет пункта, чтобы отловили исключение... Требуется только, чтобы оно возникло... Нас готовят к неадеватным ТЗ. Ну что ж, спасибо.
Филипп22 уровень, Минск
6 февраля, 17:26
Фигня какая-то, словил исключения трайкетчем - не правильно, пробросил виртуальной машине - правильно. В задании сказано что исключение должно возникать, про методы его обработки ничего не сказано.
Eugene18 уровень
13 февраля, 19:51
Такая же беда. Пока не прочитал комментарии - не решил. Try catch ловил исключения, программа работала как нужно, но валидатору он был "поперёк горла", непонятно почему. В итоге 6 попыток на решение.
Voffka Nest15 уровень, Москва
28 января, 13:30
Делал, а все зря, такое не принимают(((
while ((number1 = Integer.parseInt(reader.readLine())) > 0 && (number2 = Integer.parseInt(reader.readLine())) > 0)
zyto16 уровень, Москва
13 марта, 08:44
В твоём варианте можно сколько угодно раз ввести 2 положительных числа. А в ТЗ сказано что должно быть введено 2 числа, и после этого программа должна завершиться...