我尝试使用 C++ 的 %
运算符获得 -1 modulo 1000000007 的结果
和 fmod
函数。
输出是 -1
,但 -1 modulo 1000000007==1000000006
。
我做错了什么?
最佳答案
说白了,你找错了运营商。
C++ 和 C %
不是 模数,而是余数。
assert(a / b * b + a % b == a); // for integral types
如果 a
非负,则取模和余数相同。否则返回值为负,只需添加
b
。template<class T>
inline constexpr auto
modulo(T a, T b) -> decltype(a%b) {
auto r = a % b;
if (r < 0) r += b;
return r;
}
或(也)对于 C:#define modulo(a, b) (a % b < 0 ? a % b + b : a % b)
为了完整性:在 C++11 之前,a / b
可以总是向下舍入而不是总是为 0,尽管 C++03 已经注意到下一个标准可能会要求舍入为 0。See Wikipedia on modulo :
And on remainder :
关于c++ - 如何在 C++ 中计算 -1 模 1000000007,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26079469/