(Python) Целочисленное деление и остаток


Целочисленное деление и остаток

В модуле "Арифметические выражения" мы говорили про целочисленные операции деления.
Вспомним их еще раз:
// - целочисленное деление. Если в результате деления получается нецелое число, то оно округляется до ближайшего целого числа меньшего, чем результат (округление вниз до ближайшего целого числа).
% - вычисление остатка от деления.
Операция вычисления остатка для отрицательных чисел в  Python выполняется немного иначе, чем в других языках программирования, таких как С++ или Паскаль
В Python операция вычисления остатка выполняется по математическим правилам, то есть, как принято считать в Теории Чисел, остаток - это неотрицательное число  (очень полезная статья здесь). Знак остатка совпадает со знаком делителя.

Пример 
c = 10 // 3      # Ответ: с = 3 
d = 10 % 3       # Ответ: d = 1
e = -7 // 4      # Ответ: e = -2
f = -7 % 4       # Ответ: f = 1
Значения переменных e и f получились такими, потому что 
-7 = (-2*4)+1

Надо запомнить!
В языке Python операция вычисления остатка для отрицательных чисел выполняется по математическим правилам, то есть \(-7\ \%\ 4 = 1 \)
В языке программирования Python знак остатка совпадает со знаком делителя. 

Целочисленные операции очень важны в программировании. Их нужно понимать и правильно использовать. А для этого нужна практика!

Целочисленное деление и остаток

Необходимость применения операции вычисления остатка от деления видна при работе с цифрами числа. 
 
Задача
Дано трехзначное число. Вывести на экран все цифры этого числа, начиная с единиц, и получить новое число, образованное перестановкой единиц и сотен.

Мы всегда представляем число как единое целое, но не стоит забывать, что числа состоят из цифр. Как же выделить у числа все его цифры?
На самом же деле, все решается достаточно просто, если вспомнить математику. А математика нам говорит, что любое число можно разложить на сумму разрядных слагаемых.

Например: 365 = 3*100 + 6*10 + 5*1 .
Мы видим, что каждая цифра - это множитель у соответствующего разрядного слагаемого. 

Покажем, как получить каждую цифру числа в отдельную переменную на примере деления столбиком на число 10. Число 10 мы берем, т.к. у нас десятичная система счисления и соответственно разрядные слагаемые 1, 10, 100 и т.д.

  

Проанализировав рисунок, можно увидеть, что 
e = n % 10        
# операция n % 10   - вычисляет последнюю цифру числа n 
# (то есть цифру единиц)  365 % 10 = 5 

d = n // 10 % 10   
# операция n // 10 - сокращает число в 10 раз, 
# то есть отбрасывает у числа последнюю цифру (365 // 10 = 36), 
# теперь мы можем вычислить цифру десятков, 
# применив к результату знакомую операцию - 
# вычислить остаток от деления на число 10, 36 % 10 = 6
 
s = n // 100       
# чтобы получить цифру сотен, достаточно у числа отбросить справа две цифры, 
# то есть дважды разделить на 10  
# (n // 10 // 10 или то же самое, что n // 100) 365 // 100 = 3

Имея сохраненные в переменных цифры числа, мы можем составить из них любое другое число, умножая нужную цифру на соответствующие разрядные множители (на 1, 10, 100 и т.д.): 
Например, строка ниже получит из исходного числа n новое число, у которого переставлены сотни и единицы:
1) цифру единиц (сохраненное в переменной e)  умножаем на 100
2) цифру десятков (сохраненное в переменной d)  умножаем на 10
3) цифру сотен мы может умножить просто на 1, или просто взять значение, сохраненное в переменной s.
Затем значения из пунктов 1, 2 и 3 необходимо просто сложить и получим новое число:
n1 = e*100 + d*10 + s;

Полностью программа будет выглядеть следующим образом:
n = int(input())
e = n % 10     
d = n // 10 % 10
s = n // 100
print(e, d, s, e*100 + d*10 + s)