Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengendalikan Nombor Negatif dalam Aritmetik Modular untuk Pengindeksan Tatasusunan yang Betul?

Bagaimana Mengendalikan Nombor Negatif dalam Aritmetik Modular untuk Pengindeksan Tatasusunan yang Betul?

Barbara Streisand
Barbara Streisandasal
2025-01-13 13:27:42777semak imbas

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

Aritmetik Modular dan Indeks Negatif

Operasi modulo standard (%) pada integer negatif boleh menghasilkan hasil yang tidak dijangka apabila digunakan untuk pengindeksan tatasusunan. Bakinya boleh negatif, membawa kepada nilai indeks tidak sah. Untuk memastikan indeks tatasusunan positif yang betul, kami memerlukan fungsi modulo yang diubah suai.

Penyelesaian biasa ialah menggunakan formula ini:

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

Ini menjamin indeks positif dalam julat [0, arrayLength - 1], tanpa mengira input i's sign.

Fungsi Modulo Tersuai

Untuk kod yang lebih bersih, fungsi mod tersuai berguna:

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

Fungsi ini mengendalikan baki negatif dengan menambahkan m untuk memastikan hasil yang positif.

Fungsi Modulo Dioptimumkan

Untuk kecekapan yang lebih baik (operasi modulo yang lebih sedikit), pertimbangkan alternatif ini:

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

Versi ini terus menyemak sama ada baki r adalah negatif, menambah m hanya apabila perlu.

Contoh

Menggunakan sama ada fungsi mod tersuai, kami mendapat kelakuan indeks tatasusunan yang dijangkakan:

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

Atas ialah kandungan terperinci Bagaimana Mengendalikan Nombor Negatif dalam Aritmetik Modular untuk Pengindeksan Tatasusunan yang Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn