[英]How to make the mod of a negative number to be positive?
基本上,我需要(-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
的倍数加到负数上,将其转换为具有相同值模 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 % 5) + 5) % 5 的建议,但我只用 (X + 5) % 5 得到了相同的结果
(X + 除数) % 除数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.