ホームページ >バックエンド開発 >C++ >配列のインデックスを正しく作成するためにモジュラー演算で負の数を処理するにはどうすればよいですか?

配列のインデックスを正しく作成するためにモジュラー演算で負の数を処理するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-13 13:27:42769ブラウズ

How to Handle Negative Numbers in Modular Arithmetic for Correct Array Indexing?

剰余演算と負のインデックス

負の整数に対する標準のモジュロ演算 (%) を配列のインデックス付けに使用すると、予期しない結果が生じる可能性があります。 残りは負の値になる可能性があり、無効なインデックス値になります。 正しい正の配列インデックスを保証するには、修正されたモジュロ関数が必要です。

一般的な解決策は、次の式を使用することです:

<code>GetArrayIndex(i, arrayLength) = (i % arrayLength + arrayLength) % arrayLength</code>

これにより、入力 i の符号に関係なく、範囲 [0, arrayLength - 1] 内の正のインデックスが保証されます。

カスタムモジュロ関数

コードをよりクリーンにするには、カスタム mod 関数が役立ちます:

<code class="language-java">public static int mod(int x, int m) {
    return (x % m + m) % m;
}</code>

この関数は、m を追加することで負の剰余を処理し、正の結果を保証します。

最適化モジュロ関数

効率を向上させる (モジュロ演算を減らす) には、次の代替案を検討してください。

<code class="language-java">public static int mod(int x, int m) {
    int r = x % m;
    return r < 0 ? r + m : r;
}</code>

このバージョンでは、剰余 r が負かどうかを直接チェックし、必要な場合にのみ m を追加します。

いずれかのカスタム mod 関数を使用すると、期待される配列インデックスの動作が得られます。

GetArrayIndex(4, 3) == 1 GetArrayIndex(3, 3) == 0 GetArrayIndex(2, 3) == 2 GetArrayIndex(1, 3) == 1 GetArrayIndex(0, 3) == 0 GetArrayIndex(-1, 3) == 2 GetArrayIndex(-2, 3) == 1 GetArrayIndex(-3, 3) == 0 GetArrayIndex(-4, 3) == 2

以上が配列のインデックスを正しく作成するためにモジュラー演算で負の数を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。