Позвольте мне начать с того, что StackOverflow на самом деле не предназначен для вопросов в форме «Пожалуйста, объясните мне этот кусок кода». Тем не менее, я по-прежнему буду проходить его для вас, поскольку вы новичок в StackOverflow, но помните об этом при написании следующего вопроса:)
TL; DR
number%10
извлекаетпоследняя цифра числа.
number /= 10
делит число на 10, удаляет десятичную часть и сохраняет ответ в number
.
Длинное объяснение
Остатки
Здесь вы используете операцию по модулю или %
. Эта операция делит числа, но вместо вывода ответа возвращает остаток .
Вот способ понимания остатков. Скажем, мы делаем 3/2
и суммируем возвращаемое значение (убираем десятичную часть):
3/2 = 1.5
floor(1.5) = 1
Теперь давайте сделаем обратное деление (умножим делитель на наш ответ):
3/2 = 1.5
1.5 * 2 = 3
Если вместо этого мы умножим делитель на наш промежуточный ответ:
1 * 2 = 2 ----> This is not 3
Чтобы вычислить остаток, мы найдем разницу между этим «неправильным» ответом и «правильным» ответом:
(correct answer) - (wrong answer) = remainder
3 - 2 = 1
remainder = 1
Итак, используя наш причудливый синтаксис %
, который возвращает остаток :
3%2 = 1
Вот еще один пример:
17/3 = 5.666
floor(5.666) = 5
Inverse of division (multiply divisor by our answer):
5.666 * 3 = 17 ----> 17 is our "correct" value
Inverse of division, by with our floored value:
5 * 3 = 15 ----> 15 is our "wrong" value
Difference between our "correct" and "wrong" values:
17 - 15 = 2
So:
17%3 = 2
В вашем коде ...
Как вы используете этот код? Скажем, введенное вами число: 4559
.
n1 = number%10 becomes:
n1 = 4559%10
Если мы следуем трюку, который мы использовали ранее,
4559/10 = 455.9
floor(455.9) = 455
455.9 * 10 = 4559 ----> Correct answer
455 * 10 = 4550 ----> Wrong answer
4559 - 4550 = 9 ----> Remainder
So:
4559%10 = 9
Короче, number%10
извлекает последнюю цифру number
.
/= 10
В вашем коде используется еще одна хитрость.
number /= 10
Здесь вы просто набираете свое первоначальное число на 10. Однако number
объявляется как int
или целое число. Целые числа не могут содержать десятичных частей. Из-за этого компьютер просто избавляется от десятичной части после деления (это по существу этажей значение). В нашем случае, поскольку 4559 / 10 = 455.9
, компьютер избавляется от .9
:
4559 / 10 = 455 ----> This is what the computer returns
Наконец, вы используете /=
, что просто означает, что делает деление с number
,и сохраните ответ в number
. Если мы снова используем 4559
:
number /= 10
cout << number ----> Outputs 455
Другими словами, number /= 10
просто удаляет цифру из number
.
int number = 4559
n1 = number%10 ----> n1 = 9
number /= 10 ----> number = 455
n2 = number%10 ----> n2 = 5
number /= 10 ----> number = 45
n3 = number%10 ----> n3 = 5
number /= 10 ----> number = 4
n4 = number%10 ----> n4 = 4