27

基本的に(-3) % 5は「-3」ではなく「2」にする必要があります。Pythonは「2」を生成しますが、C++は「-3」を生成します。C++で「2」を生成する方法がわかりません。ありがとう!

4

6 に答える 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 に答える