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 中 %
和 /
的运算结果一致。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。