Heim >Backend-Entwicklung >C++ >Wie behandelt man negative Zahlen in der modularen Arithmetik für eine korrekte Array-Indizierung?
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!