Wie man mod ist eine negative Zahl, um positiv zu sein?
Im Grunde, ich brauche (-3) % 5
auf "2" statt "-3". Python erzeugt, "2", aber C++ erzeugt "-3". Nicht sicher, wie Sie zu produzieren "2" in C++. Danke!
- Keith wirft einen wichtigen Punkt in einem Kommentar. Deine zweite operand immer positiv? Wenn nicht, was soll passieren, wenn es negativ ist?
Du musst angemeldet sein, um einen Kommentar abzugeben.
((x % 5) + 5) % 5
aber ich bin sicher, es gibt eine elegantere Möglichkeit.Fügen Sie die Basis, wenn die eingegebene Nummer
X
negativ:Y<0
als gut.Können Sie fügen Sie einige mehrere von
5
um die negative Zahl zuerst, um Sie zu konvertieren, um eine positive Zahl mit dem gleichen Wert mod 5.Können Sie tun, indem Sie die absolute-von der negativen Zahl, hinzufügen was auch immer nötig ist, um zu einer Aufrundung zum nächsten vielfachen von 5, und dann fügen Sie es Ihrer negative Zahl, und das sollte schon eine Zahl zwischen 0 und 4.
Alternativ einfach etwas wie:
und dann funktioniert es (Erklärung: mathemagic)
(x + (abs(x)+y-abs(x)%y)) % y
mod
. Als Hailiang Zhang sagte, der code schlägt fehl, wenn num%(mod==0; I fixed it in ein edit-gerade jetzt.Quick & dirty " - Weise ist zu schreiben
Beispielsweise
((-3 % 5) + 5) % 5 == 2
. Dies jedoch führt zwei separate Divisionen, und da Divisionen sind eine der langsamsten arithmetische Operationen, die Sie könnte wie eine der folgenden alternativen:(1) Allgemeine
mod
für integer-oder floating-point(2) Nicht-Verzweigung
mod
für 32-bit-GanzzahlenAll das setzt Voraus, dass die
divisor
ist immer positiv.