基本上,我需要
(-3) % 5
为“2”而不是“-3”。 Python 生成“2”,而 C++ 生成“-3”。不知道如何在 C++ 中生成“2”。谢谢!
最简单:
((x % 5) + 5) % 5
如果输入数字
X
为负数,则添加底数:
X % Y + (X % Y < 0 ? Y : 0);
快速而肮脏的方法是写作
((x % divisor) + divisor) % divisor
例如,
((-3 % 5) + 5) % 5 == 2
。然而,这执行两个单独的除法,并且由于除法是最慢的算术运算之一,您可能会喜欢以下替代方案之一:
(1) 通用
mod
对于整数或浮点
int mod(int x, int divisor)
{
int m = x % divisor;
return m + (m < 0 ? divisor : 0);
}
template<class Num> Num mod(Num x, Num divisor)
{
Num m = x % divisor;
return m + (m < 0 ? divisor : 0);
}
(2) 32 位整数的非分支
mod
int mod(int x, int divisor)
{
int m = x % divisor;
return m + ((m >> 31) & divisor);
}
所有这些都假设
divisor
始终为正。
5
的倍数,将其转换为具有相同值 mod 5 的正数。您可以通过取负数的绝对值,添加将其四舍五入到下一个 5 的倍数所需的任何内容,然后将其添加到您的负数中,这应该已经是 0 到 4 之间的数字了。
或者,只需执行以下操作:
num = -2;
mod = 5;
if ( num < 0 ) {
result = mod - (abs(num) % mod);
}
它会起作用(解释:
mathemagic)
int x=-3;
// first approach
cout<<((x % 5) + 5) % 5;
//second approach means just reverse the number modNum%x
cout<<5%x;
(X + 除数) % 除数。