Добрый день. Что не так с последним пунктом. В данном виде выбивает тайм-аут. Если раскомментить 16 и 28 строки, то проваливается в последнем пункте. Хотя НОД вычисляет правильно. НОД определяю путем деления большего на меньшее, в случае не нулевого остатка большее заменяем на этот остаток и снова деление. Как только в какой-то паре получается нулевой остаток, то искомый НОД это меньшее число в паре.
package com.javarush.task.task14.task1420;
/*
НОД
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int a, b, nod;
while (true) {
//System.out.println("Введите два положительных целых числа:");
try {
a = Integer.parseInt(reader.readLine());
b = Integer.parseInt(reader.readLine());
if ((a <= 0) || (b <= 0))
throw new NumberFormatException();
break;
} catch (NumberFormatException e) {
//System.out.println("Числа должны быть положительные и целые");
}
}
nod = nod(a, b);
System.out.println(nod);
}
//определение НОД рекурсивно
public static int nod(int a, int b) {
int rez;
MaxMin maxmin = maxAndMin(a, b);
rez = maxmin.getMax() % maxmin.getMin();
if (rez == 0)
return maxmin.getMin();
else
return nod(rez, maxmin.getMin());
}
//метод что есть максимум, а что минимум
public static MaxMin maxAndMin(int a, int b) {
if (a > b)
return new MaxMin(a, b);
else
return new MaxMin(b, a);
}
//пара max и min
public static class MaxMin {
private int max, min;
MaxMin(int max, int min) {
this.max = max;
this.min = min;
}
public int getMax() {
return max;
}
public int getMin() {
return min;
}
}
}
/*НОД
Наибольший общий делитель (НОД).
Ввести с клавиатуры 2 целых положительных числа.
Вывести в консоль наибольший общий делитель.
Требования:
1. Программа должна считывать с клавиатуры 2 строки.
2. В случае если введенные строки невозможно преобразовать в положительные целые числа, должно возникать исключение.
3. Программа должна выводить данные на экран.
4. Программа должна выводить на экран наибольший общий делитель(НОД) чисел считанных с клавиатуры и успешно завершаться.*/