ホームページ >バックエンド開発 >C++ >負の数の剰余を正しく計算するにはどうすればよいでしょうか?

負の数の剰余を正しく計算するにはどうすればよいでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-13 13:31:42289ブラウズ

How Do We Correctly Calculate the Modulo of Negative Numbers?

負の剰余数: 難しい問題

正の数の場合、ある整数を別の整数で割った余りを計算するのは簡単です。ただし、標準のモジュロ演算子 (%) では、負の数値が含まれる場合に予期しない結果が生じる可能性があります。これは、モジュロ演算子が除算後の剰余を返し、負のオペランドの場合、結果も負になるためです。

この問題を克服し、負の数の係数を正しく決定するには、アプローチを適応させる必要があります。一般的な解決策は、結果が常に望ましい範囲内に収まるようにカスタム モジュール関数を作成することです。

以下は、正および負の入力を正確に処理するモジュラー関数の実装です。

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

この関数では、まず標準のモジュロ演算子を使用して除算の余りを取得します。剰余が負の場合、モジュロ値を加算して正の範囲に変換します。それ以外の場合は、残りをそのまま返します。

この修正されたモジュロ関数を使用すると、入力が正の整数であるか負の整数であるかに関係なく、配列内のインデックス位置を正確に決定できます。例:

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 までご連絡ください。