首頁 > 後端開發 > C++ > 如何處理模運算中的負數以實現正確的數組索引?

如何處理模運算中的負數以實現正確的數組索引?

Barbara Streisand
發布: 2025-01-13 13:27:42
原創
769 人瀏覽過

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

模算術和負索引

負整數的標準模運算 (%) 在用於陣列索引時可能會產生意外結果。 餘數可能為負數,導致索引值無效。 為了確保正確的正數組索引,我們需要修改模函數。

常見的解決方案是使用以下公式:

<code>GetArrayIndex(i, arrayLength) = (i % arrayLength + arrayLength) % arrayLength</code>
登入後複製

這保證了 [0, arrayLength - 1] 範圍內的正索引,無論輸入 i 的符號如何。

自訂模函數

為了讓程式碼更簡潔,自訂 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板