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