Инверсия числа

17. Развернуть цифры целого числа

Условие задачи:
Необходимо реализовать метод, который принимает целое число x, разворачивает порядок его цифр и возвращает полученное число.

Требования:

  • входное число должно находиться в диапазоне [-10000, 10000];

  • если число выходит за этот диапазон, необходимо выбросить исключение;

  • знак числа должен сохраняться;

  • ведущие нули после разворота отбрасываются автоматически.

Примеры:

123   → 321
-123  → -321
120   → 21
0     → 0

Спойлеры к решению

Подсказки
💡 Сначала проверь допустимый диапазон входного числа.
💡 Через % 10 можно получить последнюю цифру числа.
💡 Через / 10 можно удалить последнюю цифру.
💡 На каждом шаге умножай накопленный результат на 10 и добавляй очередную цифру.
💡 Удобно отдельно сохранить знак числа и работать с его модулем.

Решение
public static int reverse(int x) {
    if (x < -10000 || x > 10000) {
        throw new IllegalArgumentException(
                "Число должно быть в диапазоне [-10000, 10000]"
        );
    }

    int sign = x < 0 ? -1 : 1;
    int number = Math.abs(x);
    int reversed = 0;

    while (number > 0) {
        int digit = number % 10;

        reversed = reversed * 10 + digit;
        number /= 10;
    }

    return reversed * sign;
}

Например, для числа 123:

123 → digit = 3 → reversed = 3
12  → digit = 2 → reversed = 32
1   → digit = 1 → reversed = 321

Последняя цифра получается через:

int digit = number % 10;

После этого она добавляется к результату:

reversed = reversed * 10 + digit;

а из исходного числа удаляется:

number /= 10;

Для отрицательного числа вычисления выполняются с модулем, а знак возвращается в конце:

return reversed * sign;

Для 120 получится 21, поскольку ведущие нули у целого числа не сохраняются.

Временная сложность — O(d), где d — количество цифр числа. Дополнительная память — O(1).