我尝试使用 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/

10-09 13:15