基本的に(-3) % 5
は「-3」ではなく「2」にする必要があります。Pythonは「2」を生成しますが、C++は「-3」を生成します。C++で「2」を生成する方法がわかりません。ありがとう!
17155 次
6 に答える
30
最も簡単に:((x % 5) + 5) % 5
于 2012-12-10T02:29:17.183 に答える
9
X
入力数が負の場合は、ベースを追加します。
X % Y + (X % Y < 0 ? Y : 0);
于 2012-12-10T02:30:14.990 に答える
6
迅速で汚い方法は書くことです
((x % divisor) + divisor) % divisor
たとえば、((-3 % 5) + 5) % 5 == 2
。ただし、これは2つの別々の除算を実行します。除算は最も遅い算術演算の1つであるため、次のいずれかの方法が好きになる可能性があります。
(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);
}
mod
(2) 32ビット整数の非分岐
int mod(int x, int divisor)
{
int m = x % divisor;
return m + ((m >> 31) & divisor);
}
divisor
これはすべて、が常に正であることを前提としています。
于 2018-06-17T21:35:56.830 に答える
3
最初に負の数に倍数を追加5
して、同じ値mod5の正の数に変換できます。
これを行うには、負の数の絶対値を取り、それを次の5の倍数に切り上げるために必要なものを追加してから、負の数に追加します。これは、すでに0から4までの数である必要があります。
または、次のようにします。
num = -2;
mod = 5;
if ( num < 0 ) {
result = mod - (abs(num) % mod);
}
そしてそれは動作します(説明:mathemagic)
于 2012-12-10T02:28:27.877 に答える
0
int x=-3;
// first approach
cout<<((x % 5) + 5) % 5;
//second approach means just reverse the number modNum%x
cout<<5%x;
于 2020-01-25T07:13:27.257 に答える
-2
((x%5)+ 5)%5について多くの提案がありますが、(X + 5)%5だけでも同じ結果が得られます
(X +除数)%除数。
于 2021-02-08T16:32:35.610 に答える