Reverse-32bit integer

Ich versuche zu lösen, exercie in leetcode.com die sich mit signed 32bit integers.

Die Aufgabe ist:

Rückkehr der inversen einer signed 32bit integer und gibt 0 zurück, wenn es überläufe des 32-bit signed integer-Bereich.

In Wikipedia:

Einem 32-bit register speichern können 32 verschiedene Werte. Der Bereich der ganzen zahlen
Werte, die gespeichert werden können in 32 bits hängt von der Ganzzahl
Darstellung verwendet. Mit den beiden am meisten verbreiteten Darstellungen, die
Wertebereich ist 0 bis 4,294,967,295 (2^32 − 1) für die Vertretung als
(unsigned) Binärzahl, und zwischen-2.147.483.648 (-2^31) durch
Und 2.147.483.647 (2^31 − 1) für die Darstellung als Zweierkomplement.

So, wenn ich was verstanden wird, ist richtig, ich sollte test zwischen den Intervallen 0 to (2^31)-1 und (-2^31) to 0 andernfalls zurück 0.

Hier ist mein code:

def reverse_int(nums):
    a = str(nums)

    if 0 < nums <= (1 << 31)-1:
        return int(a[::-1])

    elif (-1 << 31) <= nums < 0:
        return -(int(a[:-len(a):-1]))
    else:
        return 0

Hier ist mein problem:
Wenn ich mein test-code auf der website mit:

nums = 1534236469 # Fail
nums = 1463847412 # Success
nums = 9000000    # Success

Warum mein aktuelle code nicht mit 1534236469 ? nicht 1534236469 im Bereich von 32 bit signed integers ? Was mir fehlt ?

  • Welche Ausgabe bekommen Sie für den Fall, dass die ausfällt?
  • Zum Beispiel, für 1534236469 auf der website sollte 0 zurückgegeben werden. Dies bedeutet, dass 1534236469 überläufe der Palette von 32-bit-Ganzzahlen mit Vorzeichen.
  • Aber es nicht überläuft.
  • In wikipedia haben Sie gesagt the two most common representations. Es gibt andere Darstellungen von 32bit-Ganzzahlen ?
  • Sie umkehren müssen dann prüfen, ob es überläuft.
  • Steven hat Recht. Es geht über den Bereich hinaus, nachdem Sie es rückgängig zu machen.
  • fügen Sie Ihren Kommentar als eine Antwort werde ich akzeptieren.

InformationsquelleAutor Chiheb Nexus | 2017-06-16
Schreibe einen Kommentar