Разворот числа в Java — программа через цикл while

Чтобы перевернуть число (например, превратить 1234 в 4321), нужно последовательно отделять последнюю цифру и приписывать её к новому числу.

Пример 1: переворот числа с помощью цикла while

На каждой итерации мы берём остаток от деления на 10 (последняя цифра) и добавляем его в reversed, домножив накопленное на 10.

class Main {
  public static void main(String[] args) {

    int num = 1234, reversed = 0;

    System.out.println("Original Number: " + num);

    // run loop until num becomes 0
    while(num != 0) {

      // get last digit from num
      int digit = num % 10;
      reversed = reversed * 10 + digit;

      // remove the last digit from num
      num /= 10;
    }

    System.out.println("Reversed Number: " + reversed);
  }
}

Вывод:

Reversed Number: 4321

Цикл while переворачивает число по следующим шагам:

  • Сначала остаток от деления num на 10 сохраняется в digit — это последняя цифра числа (4).

  • digit добавляется к reversed после умножения reversed на 10. Умножение на 10 сдвигает разряды влево: единицы становятся десятками, десятки — сотнями и так далее. На первой итерации reversed = 0 × 10 + 4 = 4.

  • Затем num делится на 10, чтобы избавиться от последней цифры (теперь num = 123).

  • После второй итерации: digit = 3, reversed = 4 × 10 + 3 = 43, num = 12.

  • После третьей: digit = 2, reversed = 43 × 10 + 2 = 432, num = 1.

  • После четвёртой: digit = 1, reversed = 432 × 10 + 1 = 4321, num = 0.

  • Когда num становится равно 0, цикл прекращается, и reversed содержит перевёрнутое число.

Пример 2: переворот числа с помощью цикла for

Тот же алгоритм можно записать через for, перенеся уменьшение числа в блок обновления.

class Main {
  public static void main(String[] args) {

    int num = 1234567, reversed = 0;

    for(;num != 0; num /= 10) {
      int digit = num % 10;
      reversed = reversed * 10 + digit;
    }

    System.out.println("Reversed Number: " + reversed);
  }
}

Вывод:

Reversed Number: 7654321

В этом варианте while заменён на for, где:

  • блок инициализации пуст, потому что num уже инициализирован выше;

  • условие то же — num != 0;

  • блок обновления содержит num /= 10.