В качестве входных данных были предоставлены две строки, представляющие два числа. Числа в строке могут быть настолько большими, что они не могут быть представлены типом данных Java int. Цель состоит в том, чтобы сравнить два числа и вывести это число в виде строки.
Например, мы должны сравнить:
"874986754789289867753896798679854698798789857387687546456"
А также
"98347598375689758967756458678976893478967586857687569874"
Которые оба находятся вне диапазона типов данных long и int в JAVA, и после сравнения мы должны вывести это число в виде строки
6 ответов
Вы можете начать с просмотра длины каждой строки. если одна из них длиннее, и вы знаете, что они оба являются беззнаковыми значениями, более длинная строка имеет большее число. если они обе имеют одинаковую длину, вы начинаете сравнивать строки char по char, начиная слева направо. когда вы находите свою первую большую цифру, вы делаете вывод, что число больше.
Неясно, пытаетесь ли вы сравнить или вычесть, но Java BigInteger
выполняет обе операции. Наверное, это то, что вам нужно:
BigInteger a = new BigInteger("874986754789289867753896798679854698798789857387687546456");
BigInteger b = new BigInteger("98347598375689758967756458678976893478967586857687569874");
System.out.println( (a.compareTo(b) > 0 ? "a" : "b") + " is larger.");
Если вам нужно вычесть числа, я бы определенно использовал BigInteger
, но если все, что вам нужно сделать, это сравнить их, вы можете написать свой собственный метод. Одна из ваших входных строк длиннее другой, поэтому исключите начальные нули, которые сразу скажут вам, какая из них больше. Если строки имеют одинаковую длину, вы можете сравнивать их посимвольно в цикле, чтобы увидеть, какая из них больше. Строка charAt
и toCharArray
предлагают два разных способа реализации этого подхода.
Чтобы использовать такие большие числа, они должны быть объявлены как двойные. Вы можете использовать синтаксические анализаторы для преобразования строк в числа.
public static void main(String [] args) {
String numberOne = "874986754789289867753896798679854698798789857387687546456";
double parsedNumberOne = Double.parseDouble(numberOne);
String numberTwo = "98347598375689758967756458678976893478967586857687569874";
double parsedNumberTwo = Double.parseDouble(numberTwo);
double result = compareMethod (numberOne, numberTwo);
System.out.println("Result = " + result);
}
Я объявил числа явно, а не путем чтения пользовательского ввода, но вы можете легко изменить это, чтобы оно соответствовало вашему коду. В compareMethod вы можете сравнивать эти числа в любом случае.
Отношении
Простого сравнения двух строк с помощью compareTo () более чем достаточно. Сравнение будет выполняться путем преобразования каждого символа в его значение ASCII.
String number1 = "874986754789289867753896798679854698798789857387687546457";
String number2 = "874986754789289867753896798679854698798789857387687546456";
int result = number1.compareTo(number2);
if (result == 0) {
System.out.println("Both are equal");
} else if (result > 0) {
System.out.println("Number1 is greater");
} else {
System.out.println("Number2 is greater");
}
Если это школьное задание, в котором вы не можете использовать встроенные решения, но вам нужно написать свой собственный метод для сравнения таких строк, вам необходимо
- проверьте знак чисел (если одно отрицательное, а одно положительное, то ответ очевиден)
- удалить ведущие нули -
0000123
представляет123
- после удаления ведущих нулей сравните длину чисел (чем длиннее среди положительных чисел, тем больше)
- если оба числа имеют одинаковую длину, перебирайте их слева направо, пока не найдете две разные цифры (если вы не найдете равных чисел).
Члены класса String вам могут понадобиться
toCharArray()
charAt(int index)
length
Если вы можете использовать встроенные решения, вы можете использовать эти строки для создания экземпляров BigInteger
и использовать его метод compareTo
, который скажет, больше ли одно число (положительный результат) равно (0) или меньше (отрицательный результат), чем другие.
Вам нужно сравнивать символы (преобразованные в числа) один за другим (или сгруппировать по группе) справа налево. Используйте такие методы, как charAt(int)
или substring(int, int)
соответственно.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.