我如何在C++中使用模数?

use*_*190 4 c++ integer modulo

如何在C++中的两个整数之间执行mod操作?

Ale*_*lex 14

在c ++中,使用%operator

更多帮助


Jim*_*wis 10

正如其他答案所述,您可以使用C++%运算符.但请注意,还没有人提到过的皱纹:在表达中a % b,如果a是消极的,那该怎么 办?该操作的结果应该是正面的还是负面的?C++标准将此归结为实现.因此,如果您想要便携地处理负面输入,您应该做类似的事情r = abs(a) % b,然后修复r符合您要求的标志.


wil*_*ell 10

C++有%运算符,偶尔会误导性地命名为"模数"运算符.特别是STL modulus<><functional>标题中有仿函数.请注意,这不是数学模运算符,因为在模数算术中,a mod b根据定义,对任何值的任何值a和任何正值都评估为非负值b.在C++中,如果任一参数为负,则结果的符号a % b实现定义的.因此,我们会更恰当地将%运算符命名为余数运算符.

也就是说,如果你真的想要数学模数运算符,那么你可以定义一个函数来做到这一点:

template<typename V>
V mod(const V& a, const V& b)
{
    return (a % b + b) % b;
}
Run Code Online (Sandbox Code Playgroud)

只要b是正值,对上述函数的调用将产生非负结果.

  • 没有人提到%C在C++中本质上是一个余数运算符,并且在给定负输入值的情况下无法提供适当的模数实现.这是最好的答案. (2认同)

Gif*_*guy 9

像这样:x = y%z

  • 除了否定股息的结果是负面的. (4认同)
  • @Potatocorn也许,也许不是.那是实现定义的. (3认同)