Рассмотрим операцию деления для целых чисел в языке 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 копеек. Определите, сколько рублей и копеек нужно заплатить за два пирожка.
Решение
#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++ верны следующие утверждения:
Для получения математически правильного остатка для любого целого 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 отрицательно, операция взятия остатка не имеет смысла, поэтому рассматривать его мы не будем.