Heim >Backend-Entwicklung >C++ >Wie behandelt man negative Zahlen in der modularen Arithmetik für eine korrekte Array-Indizierung?

Wie behandelt man negative Zahlen in der modularen Arithmetik für eine korrekte Array-Indizierung?

Barbara Streisand
Barbara StreisandOriginal
2025-01-13 13:27:42777Durchsuche

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

Modulare Arithmetik und negative Indizes

Standard-Modulo-Operationen (%) für negative Ganzzahlen können bei der Array-Indizierung zu unerwarteten Ergebnissen führen. Der Rest kann negativ sein und zu ungültigen Indexwerten führen. Um korrekte positive Array-Indizes sicherzustellen, benötigen wir eine modifizierte Modulo-Funktion.

Eine gängige Lösung ist die Verwendung dieser Formel:

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

Dies garantiert einen positiven Index innerhalb des Bereichs [0, arrayLength - 1], unabhängig vom Vorzeichen der Eingabe i.

Benutzerdefinierte Modulo-Funktion

Für saubereren Code ist eine benutzerdefinierte mod-Funktion hilfreich:

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

Diese Funktion verarbeitet negative Reste, indem sie m hinzufügt, um ein positives Ergebnis sicherzustellen.

Optimierte Modulo-Funktion

Für eine verbesserte Effizienz (weniger Modulo-Operationen) sollten Sie diese Alternative in Betracht ziehen:

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

Diese Version prüft direkt, ob der Rest r negativ ist, und fügt m nur bei Bedarf hinzu.

Beispiele

Mit einer der benutzerdefinierten mod-Funktionen erhalten wir das erwartete Verhalten des Array-Index:

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

Das obige ist der detaillierte Inhalt vonWie behandelt man negative Zahlen in der modularen Arithmetik für eine korrekte Array-Indizierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn