В качестве входных данных были предоставлены две строки, представляющие два числа. Числа в строке могут быть настолько большими, что они не могут быть представлены типом данных Java int. Цель состоит в том, чтобы сравнить два числа и вывести это число в виде строки.

Например, мы должны сравнить:

"874986754789289867753896798679854698798789857387687546456"

А также

"98347598375689758967756458678976893478967586857687569874"

Которые оба находятся вне диапазона типов данных long и int в JAVA, и после сравнения мы должны вывести это число в виде строки

3
Akshay Sharma 23 Авг 2014 в 17:34
Вы имеете в виду, что хотите вычесть два числа и представить эту разницу как число?
 – 
ErstwhileIII
23 Авг 2014 в 17:36
 – 
Konstantin V. Salikhov
23 Авг 2014 в 17:36
Вам нужно написать свой собственный метод или вы можете использовать встроенное решение? Также мы можем увидеть ваши попытки решить эту проблему?
 – 
Pshemo
23 Авг 2014 в 17:37
Нет, нет, пользователь даст нам строки, которые на самом деле являются двумя числами, но затем мы должны сравнить числа и вывести число, которое больше ///
 – 
Akshay Sharma
23 Авг 2014 в 17:38
Мы также можем написать свой собственный метод
 – 
Akshay Sharma
23 Авг 2014 в 17:39

6 ответов

Лучший ответ

Вы можете начать с просмотра длины каждой строки. если одна из них длиннее, и вы знаете, что они оба являются беззнаковыми значениями, более длинная строка имеет большее число. если они обе имеют одинаковую длину, вы начинаете сравнивать строки char по char, начиная слева направо. когда вы находите свою первую большую цифру, вы делаете вывод, что число больше.

9
gpu3d 23 Авг 2014 в 17:41
2
Нужно проверить ведущие нули.
 – 
Hot Licks
23 Авг 2014 в 17:49

Неясно, пытаетесь ли вы сравнить или вычесть, но 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 предлагают два разных способа реализации этого подхода.

2
Bill the Lizard 23 Авг 2014 в 17:50

Чтобы использовать такие большие числа, они должны быть объявлены как двойные. Вы можете использовать синтаксические анализаторы для преобразования строк в числа.

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 вы можете сравнивать эти числа в любом случае.

Отношении

0
Jubileu Tembe 23 Авг 2014 в 18:36

Простого сравнения двух строк с помощью 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");
}
0
Loganathan Mohanraj 23 Авг 2014 в 20:14
Это только в том случае, когда строки имеют одинаковую длину.
 – 
Niko
19 Июл 2021 в 00:46

Если это школьное задание, в котором вы не можете использовать встроенные решения, но вам нужно написать свой собственный метод для сравнения таких строк, вам необходимо

  1. проверьте знак чисел (если одно отрицательное, а одно положительное, то ответ очевиден)
  2. удалить ведущие нули - 0000123 представляет 123
  3. после удаления ведущих нулей сравните длину чисел (чем длиннее среди положительных чисел, тем больше)
  4. если оба числа имеют одинаковую длину, перебирайте их слева направо, пока не найдете две разные цифры (если вы не найдете равных чисел).

Члены класса String вам могут понадобиться

  • toCharArray()
  • charAt(int index)
  • length

Если вы можете использовать встроенные решения, вы можете использовать эти строки для создания экземпляров BigInteger и использовать его метод compareTo, который скажет, больше ли одно число (положительный результат) равно (0) или меньше (отрицательный результат), чем другие.

0
Pshemo 22 Ноя 2016 в 01:17

Вам нужно сравнивать символы (преобразованные в числа) один за другим (или сгруппировать по группе) справа налево. Используйте такие методы, как charAt(int) или substring(int, int) соответственно.

-1
WrongASP 23 Авг 2014 в 17:39
1
На самом деле, можно сравнивать слева направо. Если два числа имеют одинаковую длину, то первая большая цифра определяет, какое число больше. (И если они не одинаковой длины и ни один из них не имеет начальных нулей, то чем больше число, тем больше.)
 – 
Hot Licks
23 Авг 2014 в 17:48
Используйте BigDecimal или BigInteger.. не переделывайте колесо (с возможной ошибкой)
 – 
ErstwhileIII
23 Авг 2014 в 17:59
Ты прав. Я на самом деле не думал об этом. Это намного эффективнее.
 – 
WrongASP
23 Авг 2014 в 18:37