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

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。python

而有時候咱們須要模除(modulo)運算,結果的符號與 divisor 一致,標準的作法就是以上的作法。ide

那麼按照恆等式 a / b * b + a mod b == a,咱們便可獲得 floordiv 的運算結果。code

此時 modulo 與 floordiv 的運算結果與 python 中 %/ 的運算結果一致。rem

相關文章
相關標籤/搜索