обратные цифры целого числа - похожие коды разных выходов - PullRequest
0 голосов
/ 05 февраля 2019

для ввода 1534236469 Я получаю 2 разных ответа: обратный и обратный1 - что делает обратный1, что неправильно?

/ ** * Учитывая 32-разрядное целое число со знаком, обратные цифрыцелое число.* * Пример 1: * * Вход: 123 Выход: 321 Пример 2: * * Вход: -123 Выход: -321 Пример 3: * * Вход: 120 Выход: 21 Примечание: Предположим, что мы имеем дело со средой, которая * может толькохранить целые числа в диапазоне 32-разрядных целых чисел со знаком: [−231, 231 * - 1].В целях этой проблемы предположим, что ваша функция возвращает 0 *, когда переполненное целое число переполняется.* /

открытый класс ReverseInteger {

public static int reverse1(int x) {
    int multiplicationFactor = 1;

    if (x < 0) {
        multiplicationFactor = -1;
    }
    x = Math.abs(x);
    int reverse = 0;
    int remainder = 0;
    while (x > 0) {
        remainder = x % 10;
        x = x / 10;
        reverse = reverse * 10 + remainder;

    }

    if (reverse > Integer.MAX_VALUE || reverse < Integer.MIN_VALUE) {
        return 0;
    }

    return reverse * multiplicationFactor;

}

public static int reverse(int x) {
    long reverse = 0;
    boolean negative = x < 0;
    x = Math.abs(x);
    while (x > 0) {
        int y = x % 10;
        x = x / 10;
        reverse = reverse * 10;
        reverse = reverse + y;

    }
    if (negative) {
        reverse = -1 * reverse;
    }
    if (reverse > Integer.MAX_VALUE || reverse < Integer.MIN_VALUE) {
        return 0;
    }
    return (int) reverse;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    reverse(1534236469);//output- 0
    reverse1(1534236469);//output- 1056389759
    // 2147483647

}

}

1 Ответ

0 голосов
/ 08 февраля 2019

reverse1-- использует int reverse - переполнение результата - reverse2 - использует Long reverse - переполнение результата не происходит

...