6

C++ で 2 つの整数の間で mod 操作を実行するにはどうすればよいですか?

4

6 に答える 6

14

C++ には%、時折、誤解を招くように「モジュラス」演算子と呼ばれる演算子があります。特に、STLにはヘッダーにmodulus<>ファンクターがあります。<functional>これは数学的モジュラス演算子ではありません。覚えておいてください。モジュラス算術では、定義により、 の任意の値および の任意の正の値a mod bに対して非負の値に評価されるためです。C++ では、引数のいずれかが負の場合、結果の符号は実装定義です。したがって、演算子を剰余演算子と呼ぶ方が適切です。aba % b%

そうは言っても、本当に数学的モジュラス演算子が必要な場合は、それを行う関数を定義できます。

template<typename V>
V mod(const V& a, const V& b)
{
    return (a % b + b) % b;
}

bが正の値である限り、上記の関数を呼び出すと負でない結果が得られます。

于 2010-04-05T23:57:41.193 に答える
14

C++ では、% 演算子を使用します

その他のヘルプ

于 2010-04-05T22:40:11.397 に答える
10

他の回答が述べているように、C++ % 演算子を使用できます。しかし、まだ誰も言及していないしわがあることに注意してください: 式では、が負のa % b場合 はどうでしょうか? aこの演算の結果は正か負か? C++ 標準では、これを実装に任せています。したがって、負の入力を移植可能に処理したい場合は、おそらく のようなことをしてから、要件に合わせr = abs(a) % bて の符号を修正する必要がありrます。

于 2010-04-05T23:09:22.617 に答える
9

このように: x=y%z

于 2010-04-05T22:41:24.407 に答える
1

double 変数を使用する場合は、使用する必要があります。

double x;
double y;
double result = fmod(x, y);
于 2012-05-02T12:20:05.233 に答える
1

モジュラス%演算子の使用:

int modulus_a_b = a % b;
于 2010-04-05T22:40:34.800 に答える