0

Programmers 2010 の C# には、私が疑問に思っていたコードがありました。

for (int i = 0; i < deck.Length; i++)
{
    deck[i] = new Card(faces[i % 13], suits[i / 13] );
}

カウントは配列メモリのスロットであり、新しいカードはスーツとフェイスをデッキに入れ、カウント量を返すことを理解しています。私が理解していないのは、どのようにモジュラスと除算をゼロにすることができるのですか? それとも私は誤解していますか?ありがとう

4

3 に答える 3

4

この質問は、モジュラス演算子が混乱しているように聞こえます。モジュラス ( %) 演算子は、除算の剰余を計算します。割り算(分子・分母)と同じ構造です。i % 13として表示されremainder of 13/iます。それは間違いです。ですremainder of i/13。したがって、iがゼロの場合、モジュラス演算子は 0 を返します。そのアプリケーションで私のゼロを除算することは決してありません。

例は3/2です。3/21年半です。しかし、その結果を整数 (10 進数なし) に保存すると、 のみ1が保存されます。その半分はどこに行ったのですか?捨てられました。必要に応じて、またはとして保存するfloatdouble、モジュラス演算子を使用できます。、残り3%2を差し上げます。1以下にプログラム例を示します。

struct ModulusHelper
{
    public int Quotient;
    public int Remainder;
    public ModulusHelper(int numerator, int denominator)
    {
        Quotient = numerator / denominator;
        Remainder = numerator % denominator;
    }
}

次のように使用できます。

class Program
{
    static void Main(string[] args)
    {
        ModulusHelper mod = new ModulusHelper(args[0], args[1]);
        Console.WriteLine("Quotient:  {0}", mod.Quotient);
        Console.WriteLine("Remainder: {0}", mod.Remainder);
        Console.ReadKey(); // BATCH `pause`
    }
}
于 2012-07-12T00:16:40.417 に答える
1

0% 13 = 0

0 / 13 = 0

簡単な数学です。

于 2012-07-12T00:09:41.247 に答える
0

0 に割るのではなく、0 を 13 で割っています。0/13 = 0

于 2012-07-12T00:11:37.967 に答える