Оператор% (модуль) выдает ответ в диапазоне 0 .. (N-1) для x% N. Учитывая, что ваши входные данные находятся в диапазоне 1..N (для N = 12), общее добавление код для добавления положительного числа y месяцев к текущему месяцу x должен быть:
(x + y - 1) % 12 + 1
Когда у равен 1, это уменьшается до
x % 12 + 1
Вычитание в основном то же самое. Однако существуют сложности с ответами, полученными различными реализациями оператора модуля, когда один или оба операнда отрицательны. Если известно, что вычитаемое число находится в диапазоне 1..N, то вы можете использовать тот факт, что вычитание y по модулю N равнозначно сложению (N - y) по модулю N. Если y является неограниченным (но положительным) ), затем используйте:
(x + (12 - (y % 12) - 1) % 12 + 1
Эта операция с двумя модулями является общей частью решения таких проблем, когда диапазон значений не контролируется.