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


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

В модуле "Арифметические выражения" мы говорили про особенности операции деления на языке С++.
Вспомним, что для целочисленных данных (тип int) можно использовать две операции деления.
/ - целочисленное деление, когда у нас отбрасывается дробная часть в результате выполнения операции деления.
% - вычисления остатка от деления.
 
Надо запомнить!
В языках C и C++ результат деления целого числа на целое – это всегда целое число, остаток при делении отбрасывается.
 

Пример
#include<iostream>
using namespace std;
int main()
{
  int a, b; 
  a = 10; 
  b = 3; 
  int c = a / b; // с = 3 
  int d = a % b;  // d = 1
  cout << c << " " << d << endl;
  return 0;
}

Эти операции очень важны в программировании. Их нужно понимать и правильно использовать. 

Практикуйтесь, программируйте чаще и больше, и у вас все получится!

 

Целочисленная арифметика

Операции целочисленного деления и вычисления остатка от деления имеют широкий спектр применения. Вот только несколько из них, которые могут вам пригодится в ближайшее время. 

1) Распределение элементов по определенному количеству групп.
Например, если у нас есть 10 кусочков шоколадки, и мы делим их на 3 друзей, то результат целочисленного деления будет 3. Это означает, что каждый друг получит по 3 целых кусочка шоколадки. А если вычислим 10 % 3 = 1, это будет означать, что 1 долька останется не разделенной.

2) Разбиение числа на цифры
Например, число 123 можно разбить на цифры следующим образом:
123 % 10 = 3 ( 3 - цифра единиц)
123 // 10 = 12
12 % 10 = 2 (2 - цифра десятков)
12 // 10 = 1 (1 - цифра сотен)

3) Модулярная арифметика
Это система арифметики, в которой числа "оборачиваются" по достижении определенного значения, называемого модулем. Она часто используется в различных областях, таких как криптография, компьютерные науки, теория чисел и даже в музыке.

Например, возьмем циферблат часов. 

На часах со стрелками циферблат разделён на 12 частей, которые мы обозначим числами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. В следующей таблице можно видеть, как время на аналоговом циферблате соответствует времени после полудня на экране цифровых часов.

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

Когда мы говорим, например, что сейчас 14:00, мы можем также сказать, что сейчас два часа дня (14 % 12 = 2). Тот же принцип применяется и в случае измерения углов. Угол в 370 градусов равен углу в 10 градусов, потому что от первого значения мы должны вычесть полный оборот в 360 градусов (или 370 % 360 = 10).

Другой пример, разбить 135 минут на часы и минуты. В одном часе 60 минут. Следовательно, если 135 поделить целочисленно на 60, то можно узнать сколько полных часов в 135 минутах (135 // 60 = 2 часа). Если вычислить остаток от деления, то можно узнать оставшиеся минуты в неполном часе (135 % 60 = 15 минут). То есть 135 минут - это 2 часа и 15 минут.

Вычисление цифр числа

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

Самый трудный вопрос, который возникает у начинающих - как же разбить число на составляющие его цифры.
На самом же деле, все решается достаточно просто, если вспомнить математику. А математика нам говорит, что любое число можно разложить на сумму разрядных слагаемых.
Например: 365=3*100+6*10+5*1 . Мы видим, что каждая цифра - это множитель у соответствующего разряда числа. 
Покажем, как получить каждую цифру числа в отдельную переменную. Рассмотрим процедуру деления  столбиком числа 365 на число 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

Получив все цифры числа, мы можем составить из них другое число, умножая нужную цифру на соответствующий разряд:  например, строка ниже получит из исходного числа n новое число, у которого переставлены сотни и единицы:
1) цифру единиц (сохраненные в переменной e)  умножаем на 100
2) цифру десятков (сохраненные в переменной d)  умножаем на 10; 
3) цифру сотен мы может умножить просто на 1, или просто взять значение, сохраненное в переменной s;
Затем значения из пунктов 1, 2 и 3 необходимо сложить и получим новое число:
n1 = e * 100 + d * 10 + s;
Целиком программа будет выглядеть следующим образом:
 
#include<iostream>
using namespace std;
int main()
{
  int n, e, d, s;
  cin >> n;
  e = n % 10;     
  d = n / 10 % 10;  
  s = n / 100;
  cout << e << " " << d << " " << s << " " << (e * 100 + d * 10 + s) << endl;
  return 0;
} 

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация