Как вывести НОД чисел, считанных с клавиатуры?
Как выводить на экран наибольший общий делитель (НОД) двух чисел, считанных с клавиатуры, и успешно завершиться?
public class Solution {
public static void main(String[] args) throws Exception {
Scanner console = new Scanner(System.in);
int result = 1;
int number1 = console.nextInt();
int number2 = console.nextInt();
String target1 = calc(number1);
String target2 = calc(number2);
String[] array1 = target1.split(" ");
String[] array2 = target2.split(" ");
String numbersSimilar = "";
for (String text1 : array1) {
for (String text2 : array2) {
if (Objects.equals(text1, text2)) {
numbersSimilar += text1 + " ";
}
}
}
String[] plusArray = numbersSimilar.split(" ");
for (String text : plusArray) {
result *= Integer.parseInt(text);
}
System.out.println(result);
}
static String calc(int number) {
int result = number;
String target = "";
while(result != 1) {
if (result % 2 == 0)
target += 2 + " ";
else if (result % 3 == 0)
target += 3 + " ";
}
return String.valueOf(result += 1);
}
}
Ответы (1 шт):
Я не совсем понимаю, чем вы руководствовались при написании этого кода. В моем понимании решение задачи по нахождению НОД начинается с поиска алгоритма расчета этого самого НОД. Этот самый алгоритм, именуемый алгоритм Евклида, находится без проблем по первому запросу в гугле, в том числе в виде весьма понятной схемы. После этого должен быть написан метод, сигнатуру которого определяет условие задачи: в аргументах принимает два целочисленных значения, возвращаете одно, которое и является НОД. В этом методе реализуется евклидов алгоритм в соответствии со схемой. Теперь следующая задача - пользовательский ввод. И снова пишем соответствующий метод... И остается лишь метод main, который должен всего лишь использовать уже написанные методы, получить результат и вывести в консоль.
import java.util.Optional;
import java.util.Scanner;
public class Main {
private final static Scanner SCANNER = new Scanner(System.in);
public static void main(String[] args) {
Integer inputNumber1 = input("Enter first number : ").orElse(0);
Integer inputNumber2 = input("Enter second number : ").orElse(0);
int nod = nod(inputNumber1, inputNumber2);
System.out.println("NOD of " + inputNumber1 + " and " + inputNumber2 + " is " + nod);
}
private static Optional<Integer> input(String message) {
try {
System.out.println(message);
return Optional.of(Integer.valueOf(SCANNER.nextLine()));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
private static int nod(int a, int b) {
if (a != 0 && b != 0) {
if (a > b) a = a % b;
else b = b % a;
return nod(a, b);
}
else return a + b;
}
}