数値の数学モジュラス用のライブラリ関数がc#にありますか?これにより、正の整数を法とする負の整数が正の結果を生成する必要があることを具体的に意味します。
例を提供するために編集:
-5モジュロ3は1を返す必要があります
試す(a % b) * Math.Sign(a)
これを試して; それは正しく動作します。
static int MathMod(int a, int b) {
return (Math.Abs(a * b) + a) % b;
}
x < 0 ? ((x % m) + m) % m : x % m;
まあ、定義は(私が間違っていなければ)このようなものです
a mod b = a - b * フロア(a/b)
おそらくかなり遅く、組み込みのモジュラスと同じように整数除算に注意してください:)
他のオプションは、オペランドの符号に従って組み込みモジュラスの結果を変更することです。このようなもの:
if(a < 0 && b > 0)
{
return (a % b + b) % b;
}
else if ....
a < 0 ? ((a+1)%b + b-1) : (a%b);
これには、% 演算 ( and one ternary op
) が 1 つだけ必要で、乗算は必要ありません。
これらのアルゴリズムのいずれかを使用していて、除算も行う必要がある場合は、必要に応じて 1 を引くことを忘れないでください。
すなわち、
もし-5 % 2 = -1
、-5 / 2 = -2
そしてあなたがそれを気にするなら、-5 / 2 * 2 + -5 % 2 = -5
あなたが計算するとき-5 % 2 = 1
、あなたも計算します-5 / 2 = -3
。
修理 :
(ans=a%b)<0 ? (a<0 && b<0 ? (ans-b)%(-b) : (ans+b)%b) : ans