int modulo(int a, int b) {
return (a % b + b) % b;
}
int floordiv(int a, int b) {
return (a - modulo(a, b)) / b;
}
眾所周知,C 語言(自從 C99 開始)的整數運算只有取餘(remainder)運算子(%
)和捨去小數部分的整數除法(truncated division, round toward 0,/
),也就是說,%
運算的結果的符號取決於 dividend(被除數)而不是 divisor。
而有時候我們需要模除(modulo)運算,結果的符號與 divisor 一致,標準的做法就是以上的做法。
那麼按照恆等式 a / b * b + a mod b == a
,我們即可得到 floordiv 的運算結果。
此時 modulo 與 floordiv 的運算結果與 python 中 %
和 /
的運算結果一致。