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).