33

数値の数学モジュラス用のライブラリ関数がc#にありますか?これにより、正の整数を法とする負の整数が正の結果を生成する必要があることを具体的に意味します。

例を提供するために編集:

-5モジュロ3は1を返す必要があります

4

8 に答える 8

29

試す(a % b) * Math.Sign(a)

これを試して; それは正しく動作します。

static int MathMod(int a, int b) {
    return (Math.Abs(a * b) + a) % b;
}
于 2010-04-22T13:12:51.220 に答える
7
x < 0 ? ((x % m) + m) % m : x % m;
于 2010-04-22T13:26:21.950 に答える
4

まあ、定義は(私が間違っていなければ)このようなものです

a mod b = a - b * フロア(a/b)

おそらくかなり遅く、組み込みのモジュラスと同じように整数除算に注意してください:)

他のオプションは、オペランドの符号に従って組み込みモジュラスの結果を変更することです。このようなもの:

if(a < 0 && b > 0)
{
    return (a % b + b) % b;
}
else if ....
于 2010-04-22T13:26:50.380 に答える
2
a < 0 ? ((a+1)%b + b-1) : (a%b);

これには、% 演算 ( and one ternary op) が 1 つだけ必要で、乗算は必要ありません。

于 2010-11-29T12:01:22.660 に答える
1

これらのアルゴリズムのいずれかを使用していて、除算も行う必要がある場合は、必要に応じて 1 を引くことを忘れないでください。

すなわち、

もし-5 % 2 = -1-5 / 2 = -2そしてあなたがそれを気にするなら、-5 / 2 * 2 + -5 % 2 = -5あなたが計算するとき-5 % 2 = 1、あなたも計算します-5 / 2 = -3

于 2010-04-23T01:25:48.033 に答える
0

修理 :

(ans=a%b)<0 ? (a<0 && b<0 ? (ans-b)%(-b) : (ans+b)%b) : ans

于 2010-04-22T16:44:28.800 に答える
-2

% 演算子でしょうか。

http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx

于 2010-04-22T13:12:12.157 に答える