Отменить существующий номер

Не могли бы вы объяснить мне, как работает этот код? Я пробовал это с любым вводом, и он всегда дает правильный результат. Я думаю, что они набирают строку reversenum = reversenum * 10;, но мне нужно какое-то пояснение по этому поводу.

public static void main(String args[]) {
   int num=123456789;
   int reversenum =0;
   while( num != 0 ){
      reversenum = reversenum * 10;
      reversenum = reversenum + num%10;
      num = num/10;
   }
   System.out.println("Reverse of specified number is: "+reversenum);
}

person Community    schedule 04.07.2015    source источник


Ответы (5)


Вы начинаете с 123456789 (num) и 0 (reversenum). Затем вы умножаете reversenum на 10: остается 0. num % 10 — это остаток от деления num на 10: это 9, которое становится reversenum. num затем делится на 10, но целочисленное деление дает нижний предел дробных результатов, поэтому вы получите 12345678 как num (НЕ 12345678,9). Во втором проходе 9 (reversenum) умножается на 10, чтобы получить 90, и добавляется последняя цифра num: 8. reversenum становится 98, а num становится 1234567. Это продолжается до тех пор, пока num не станет 0, а reversenum не станет 987654321; тогда условие цикла while будет удовлетворено.

person bcsb1001    schedule 04.07.2015

По сути, код делает следующее:

  • Снимите цифру единиц с исходного числа.
  • Добавьте эту цифру в крайнее правое положение реверса.
  • Умножьте обратное число на 10, чтобы цифра сдвинулась на единицу вверх.
  • Разделите оригинал на 10, чтобы перейти к следующей цифре.
  • Так происходит до тех пор, пока не останется цифр.
person James Ko    schedule 04.07.2015

В конце каждого прохода цикла while текущая последняя цифра num удаляется и становится последней цифрой reversenum. Таким образом, последняя цифра num удаляется, и она становится первой цифрой, добавляемой к reversenum (и, следовательно, первой цифрой reversenum). Затем он берет то, что изначально было предпоследней цифрой num, и становится второй цифрой, добавленной к reversenum (и, таким образом, второй цифрой reversenum). Это продолжается до тех пор, пока не останется цифр для перемещения.

Посмотрим на первый проход:

reversenum становится 0*10, что равно 0. Затем вы добавляете num%10, что равно 9. Таким образом, reversenum становится 9.

Между тем целочисленное деление делает num равным 12345678.

Глядя на следующий проход:

reversnum становится 9*10, что равно 90, затем прибавляем num%10, что равно 8, так что reversenum становится 98.

Тем временем целочисленное деление превращает num в 1234567.


небольшое предупреждение

Что, по-вашему, является обратной стороной 90? Вы должны знать об этом случае.

person Joel    schedule 04.07.2015
comment
Ввод 90 900 9000 ect дает результат 9 .. не 09 009 0009. спасибо за это наблюдение! - person ; 04.07.2015
comment
какие-либо предложения по улучшению кода, чтобы не выходить за нули? - person ; 04.07.2015
comment
взгляните на stackoverflow. ком/вопросы/11424294/ - person Joel; 05.07.2015

Пусть ваше число будет 12345. Извлекаем цифры с конца. Сначала мы находим остаток при делении 12345 на 10. Остаток становится равным 5. Теперь мы добавляем его к нашему обратному числу, которое должно хранить обратное число. Затем делим 12345 на 10. Поскольку целое число, деленное на целое число, дает целочисленное значение. Следовательно

число = 12345/10 = 1234

Мы умножаем число реверса на 10, чтобы число реверса стало равным 50, и снова прибавляем остаток к номеру реверса. Итак, во второй раз число реверса становится равным 54. Затем мы извлекаем последнюю цифру 1234 (переменная num). Как видите, это продолжается до тех пор, пока общее число не станет обратным, т. е. num=0 (больше не нужно извлекать цифры).

person Sourav Kanta    schedule 04.07.2015

Внутри оператора while он умножает переменную reversenum на десять, затем прибавляет остаток num/10 к reversenum, а затем, наконец, делит num на десять. Этот оператор while может закончиться, потому что, поскольку каждая переменная является целым числом, деление num на десять всегда будет давать округленную версию num/10, если num не делится на 10 без остатка.

person Will Fisher    schedule 04.07.2015