Статья Автор: Лебедев Дмитрий

Конспект 3. Целочисленная арифметика


C++_Целочисленная арифметика. Теория

Рассмотрим операцию деления для целых чисел в языке C++. Пусть есть два целых положительных числа a и b. Операция деления над двумя целыми величинами (константами или переменными) всегда выполняется как операция деления нацело.

Запишем в переменную cc целую часть от деления aa на bb:

c = a / b;

Запишем в переменную dd остаток от деления aa на bb:

d = a % b;

Например, если a=10, a b=3, то получим c=3, а d=1.

Для чисел c и d при положительном aa верны следующие утверждения:

  • a=b⋅c+d
  • 0⩽d<b

Задача про два пирожка

Пирожок в столовой стоит a рублей и b копеек. Определите, сколько рублей и копеек нужно заплатить за два пирожка.

Решение

#include <iostream>
using namespace std;
int main()
{
    int a, b;
    cin >> a >> b;
    int k, r;
    k = a * 100 + b; // стоимость пирожка в копейках
    k = k * 2; // стоимость двух пирожков в копейках
    r = k / 100; // стоимость двух пирожков в рублях
    k = k % 100; // остаток стоимости двух пирожков в копейках
    cout << r << " " << k << endl;
    return 0;
}
 

Рассмотрим случай, когда число a отрицательное. При делении отрицательного числа на положительное в языке C++ остаток будет отрицательным, что идёт вразрез с математическим определением. Например, при a=−10, b=3 в языке C++ получим c=−3, d=−1, в то время как математически корректным был бы результат c=−4, d=2.

Итак, при отрицательном a для чисел c и d в языке C++ верны следующие утверждения:

  • a=b∗c+d
  • −b<d⩽0

Для получения математически правильного остатка для любого целого aa можно воспользоваться следующими формулами:

d = (a % b + b) % b
c = (a - d) / b

Задача про часы

Сейчас часы показывают tt часов. Необходимо узнать, сколько они будут показывать через xx часов, если xx положительно, или сколько они показывали за |x||x| часов до этого, если xx отрицательно.

Решение

#include <iostream>
using namespace std;
int main()
{
    int t, x;
    cin >> t >> x;
    cout << ((t + x) % 24 + 24) % 24 << endl;
    return 0;
}
 

Заметим, что в случае, когда число bb отрицательно, операция взятия остатка не имеет смысла, поэтому рассматривать его мы не будем.


Задачи для тренировки

1) Делёж яблок

 

2)  Настольный тенниc

 

3) Стоимость покупки

 

4) Предпоследняя цифра

 

5)Электронные часы

 
6). Делёж яблок — 2  

7)  Автопробег

 
8) Страницы книги  
9) Шахматная доска  
10) МКАД  

Задачи с разбором

Разбор задачи "Следуюшее чётное"
z1*) Следующее чётное  
Разбор задачи "Сумма цифр"
z2*)  Сумма цифр  
Разбор задачи "Симметричное число"
z3*) Симметричное число  

Печать