C 語言實現整數快速模除(modulo)和地板除(floordiv)

bf發表於2019-05-11
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 中 %/ 的運算結果一致。

相關文章