Это не сразу видно.По существу, идея состоит в том, чтобы «выскочить» цифры с конца номера ввода пользователя и «надавить» их на обратный номер по одной цифре за раз.
Это может помочь вам увидеть немного рефакторинга версию с комментариями:
int input = 0; // The user input. Does not change after it's been entered.
int reversed = 0; // The reversed user input, gradually built one number at a time.
int working_value = 0; // Starts off as the user input and numbers are
// gradually removed from the end
// Get the user input
cout << "Enter a positive number: ";
cin >> input;
working_value = input;
do
{
//Get the last digit of the working value
int last_digit = working_value % 10;
//Remove the last digit from the working value
working_value = working_value/10;
// "Shift" the reversed digits, and add the last digit of the
// working value
reversed = (reversed * 10) + last_digit;
} while (working_value != 0);
// ... identical from here
Он также может быть полезно пройти через полный пример. Мы будем использовать значение .
пользователь вводит номер и наше рабочее значение установлено на 517.
user_input = 517
working_value = 517
reversed = 0
На нашей первой итерации цикла, мы получаем последнюю цифру рабочего значения и удалить его.
user_input = 517
working_value = 51
last_digit = 7
Затем мы выполняем наш сдвиг на нашем текущем обратном значении и добавляем последнюю цифру. (0 * 10) + 7 = 7
reversed = 7
Наше рабочее значение не равно нулю, поэтому мы снова идти вокруг петли и получить последнюю цифру рабочего значения и удалить его:
user_input = 517
working_value = 5
last_digit = 1
Затем мы выполняем свою смену на наш ток обратной значение и добавьте эту последнюю цифру. (7 * 10) + 1 = 71
reversed = 71
Наше рабочее значение не равно нулю, так мы идем вокруг петли снова и получить последнюю цифру рабочего значения и удалить его. Была только одна цифра, поэтому значение work_value становится равным нулю.
user_input = 517
working_value = 0
last_digit = 5
Затем мы выполняем наш сдвиг на нашем текущем обратном значении и добавляем последнюю цифру. (71 * 10) + 5 = 715
reversed = 715
Теперь наше рабочее значение равно нулю поэтому мы останавливаемся. Мы построили номер 715 как обратный 517. Теперь мы можем просто сравнить числа и увидеть, что они не совпадают.
_ «кто-то объяснил бы, что происходит в этих действиях?» _ Немного математики. –
Это просто строит обратное 'num' в' rev'. – ForceBru
Какую часть этого кода вы не понимаете? Вы знаете, что такое операторы и как они работают? Если это так, вы можете сделать шаги на карандаше и бумаге, чтобы посмотреть, как они работают, или выполнить код с вашим отладчиком и посмотреть, что происходит. – NathanOliver