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是正值,对上述函数的调用将产生非负结果.