基本上,我需要(-3) % 5
为“2”而不是“-3”。 Python产生“2”,但C ++产生“-3”。不知道如何在C ++中生成“2”。谢谢!
答案 0 :(得分:20)
((x % 5) + 5) % 5
但我确信这是一种更优雅的方式。
答案 1 :(得分:6)
如果输入数字X
为负数,请添加基数:
X % Y + (X % Y < 0 ? Y : 0);
答案 2 :(得分:2)
快速&amp;肮脏的方式是写
((x % divisor) + divisor) % divisor
例如,((-3 % 5) + 5) % 5
。然而,这会执行两个单独的分区,并且由于分区是最慢的算术运算之一,您可能会喜欢以下其中一个:
(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
始终为正。
答案 3 :(得分:1)
您可以先将5
的倍数添加到负数,然后将其转换为具有相同值mod 5的正数。
您可以通过取负数的绝对值,添加所需的内容将其四舍五入到下一个5的倍数,然后将其添加到负数,这应该是0到0之间的数字4。
或者,只需执行以下操作:
num = -2;
mod = 5;
if ( num < 0 ) {
result = mod - (abs(num) % mod);
}
它会起作用(解释: mathemagic )
答案 4 :(得分:0)
int x=-3;
// first approach
cout<<((x % 5) + 5) % 5;
//second approach means just reverse the number modNum%x
cout<<5%x;
答案 5 :(得分:-2)
我看到了很多关于 ((x % 5) + 5) % 5 的建议但是我得到了相同的结果 (X + 5) % 5
(X + 除数) % 除数。