65

モジュラス(%) 演算子が除算の余りを計算することは知っています。モジュラス演算子を使用する必要がある状況をどのように特定できますか?

モジュラス演算子を使用して、数値が偶数か奇数か、素数か合成かを確認できることは知っていますが、それだけです。私は残りの点で考えることはあまりありません。モジュラス演算子は便利だと思います。それを活用する方法を学びたいと思います。

モジュラス演算子が適用される場所を特定するのに問題があります。さまざまなプログラミングの状況で、問題を見て「おい、除算の残りはここでうまくいくだろう!」と気付くのは難しいことです。

4

19 に答える 19

27

経過時間が秒単位であり、これを時間、分、秒に変換するとします。

h = s / 3600;
m = (s / 60) % 60;
s = s % 60;
于 2010-04-09T16:57:48.873 に答える
21
0 % 3 = 0;
1 % 3 = 1;
2 % 3 = 2;
3 % 3 = 0;

それが何をしたか見ましたか?最後のステップでゼロに戻りました。これは、次のような状況で使用できます。

  1. N が M で割り切れるかどうか (たとえば、奇数または偶数)、または N が M の倍数かどうかを確認します。

  2. 特定の値の上限を設定する。この場合は 3.

  3. 数値の最後の M 桁を取得するには -> N % (10^M)。
于 2010-04-09T17:08:20.693 に答える
17

大きなループの進行状況を示すプログレス バーなどに使用します。進行状況は、ループの n 回ごと、または count%n == 0 の場合にのみ報告されます。

于 2010-04-09T17:18:42.010 に答える
12

数値を特定の倍数に制限するときに使用しました。

temp = x - (x % 10); //Restrict x to being a multiple of 10
于 2010-04-09T16:59:42.367 に答える
11
  • 値をラップする (時計のように)。
  • 対称鍵アルゴリズムに有限フィールドを提供します。
  • ビット演算。

等々。

于 2010-04-09T17:08:29.743 に答える
6

例。Xバイトのメッセージがありますが、プロトコルの最大サイズはYおよびY <Xです。メッセージをパケットに分割する小さなアプリを作成してみてください。そうすると、modが発生します:)

于 2010-04-09T16:57:02.017 に答える
5

それが役立つ多くの例があります。

数値を特定の範囲内に制限する必要がある場合は、modを使用できます。たとえば、0から99までの乱数を生成するには、次のように言います。

num = MyRandFunction() % 100;
于 2010-04-09T16:57:20.037 に答える
5

@jweyrich が言うように、値をラップします。有限のリストがあり、それをループで繰り返し処理したい場合、mod が非常に便利であることがわかりました。たとえば、チャート シリーズなどの一部の UI 要素の色の固定リストのように、すべてのシリーズを異なるものにしたい場合などです。可能な限りですが、色がなくなったら最初からやり直してください。これは、たとえばパターンで使用することもできます。そのため、2 回目に赤が現れると破線になります。3回目、点線など-しかし、modは赤、緑、青、赤、緑、青を永遠に取得するために使用されます。

于 2010-04-09T17:37:59.060 に答える
4

素数の計算

于 2010-04-09T16:57:42.130 に答える
4

モジュロは、合計分を「時間と分」に変換して分割するのに役立ちます。

時間 = 分 / 60

minutes_left = 分 % 60

時間ビットでは、小数部分を削除する必要があります。これは、使用している言語によって異なります。

その後、それに応じて出力を再配置できます。

于 2014-08-02T21:51:16.123 に答える
4

割り算があり、余りを 10 進数以外で表現したい場合はいつでも、mod 演算子が適しています。頭に浮かぶのは、一般的に、残りの部分で人間が読める何かをしたいときです。バケツに入れることができるアイテムの数をリストし、「残り 5 つ」と言うのは良いことです。

また、丸め誤差が発生する可能性がある場合は、モジュロ除算が適しています。たとえば、頻繁に 3 で除算する場合、剰余として .33333 を渡したくありません。剰余と除数 (つまり、分数) を渡すのが適切です。

于 2010-04-09T17:09:04.000 に答える
3

Modulus はまた、何らかの理由で整数除算を行って小数を取得する必要があり、整数を小数除算をサポートする数値に変換できない場合、または小数ではなく分数を返す必要がある場合にも非常に役立ちます。 .

%モジュラス演算子として使用します

例えば

2/4 = 0

どこでこれをしている

2/4 = 0 and 2 % 4 = 2

つまり、ユーザーが分子と除数を入力できるようにして、結果を整数として表示し、次に分数として表示したいとします。

whole Number = numerator/divisor
fractionNumerator = numerator % divisor
fractionDenominator = divisor

モジュラス除算が役立つもう 1 つのケースは、数値を増加または減少させ、その数値を特定の範囲の数値に含めたいが、上限または下限に達したときに停止したくない場合です。それぞれリストの一番下または一番上までループしたい。

配列をループする関数を想像してください。

Function increase Or Decrease(variable As Integer) As Void
    n = (n + variable) % (listString.maxIndex + 1)  
    Print listString[n]
End Function

n = (n + variable) % (listString.maxIndex + 1) である理由は、最大インデックスを考慮するためです。

これらは、デスクトップ アプリケーションだけでなく、ロボティクスやシミュレーション環境のプログラミングでもモジュラスを使用しなければならなかったことのほんの一部です。

于 2010-04-09T17:13:08.237 に答える
2
  • 最大公約数の計算
  • 数が回文であるかどうかの判断
  • 数値が...のみで構成されているかどうかを判断する
  • いくつあるかを決定する...数は...で構成されます
于 2010-04-09T17:49:47.427 に答える
2

私のお気に入りの用途は反復です。

インクリメントしているカウンターがあり、既知のリストから対応するアイテムを取得したいが、n選択するアイテムしかなく、サイクルを繰り返したいとします。

var indexFromB = (counter-1)%n+1;

与えられた結果 ( counter=indexFromB) n=3:

`1=1`
`2=2`
`3=3`
`4=1`
`5=2`
`6=3`
...
于 2016-10-17T16:49:37.463 に答える