Сегодня мы рассмотрим одну из тех задач, что предлагаются начинающим.
Допустим. Дано целое число (например, 1234). Необходимо получить число, в котором те же самые цифры идут в обратной последовательности (то сеть, 4321).
Сразу отбросим очевидные и неэффективные подходы наподобие преобразования числа в строку. Для решения этой задачи достаточно воспользоваться обычной арифметикой.
Алгоритм, следующий:
- Получить остаток от деления исходного числа на 10 и записать в переменную, в которой будем накапливать результат;
- Разделить исходное число на 10 (это будет исходное число для следующей итерации);
- Умножить результат операции 1 на 10;
- Прибавить к результату операции 1 остаток от деления на 10 числа, полученного в ходе операции 2 и записать в переменную, в которой будем накапливать результат;
- Разделить на 10 число, полученное в результате операции 2 и т.д. до тех пор, пока исходное число итерации не станет равно 0.
В результате в переменной для накопления результата будет нужное нам число.
Конечно, на словах это воспринимается достаточно сложно, но реализация в коде на самом деле очень простая.
1 2 3 4 5 6 7 8 9 |
private static int reverseNumber(int num) { int reverse = 0; while (num != 0) { reverse = reverse * 10; reverse = reverse + num % 10; num = num / 10; } return reverse; } |
Добавить комментарий