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, dass1534236469
ü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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits erwähnt in den Kommentaren, müssen Sie ersten reverse und dann überprüfen. Aber hier ist eine andere Art von Prüfung.
Zu überprüfen, können Sie nur
&
das Ergebnis mit der entsprechenden Maske.Also in Ihrem Fall die Grenzen sind
−2,147,483,648
und2,147,483,647
die hex-Werte sind-0x80000000
und0x7fffffff
Versuchen, diese im interpreter.
Werte, die den Grenzwert überschreiten, können Sie sehen, einige andere Wert wird angezeigt.
Aber, wenn der Wert innerhalb des Limits. Der Wert wird als Ausgang.
Für negative Werte
Wenn der Wert innerhalb des Bereichs. Die limit ist gegeben als Ausgabe.
Jedoch, wenn der Wert out of range Sie können sehen, einige andere Wert wird angezeigt.
Können Sie Gebrauch machen von diesem gut und gut zu bekommen, was Sie wollen!
Hier ist ein Programm, das tut, was Sie wollen.
Den Teil unten einfach kehrt für positive und negative Werte.
Setzen die Grenzen
neg_limit= -0x80000000
undpos_limit= 0x7fffffff
und überprüfen für Sie gemäß der erläuterten Logik.int
vonstr_x
wenn es zwischen(-1 << 31)
und(1 << 31)-1
. Wenn nicht zurück0
. Übrigens, dein Ansatz ist richtig zu, aber zu langatmig.&
und mit einemmask
Die Lösung ist schon da, ich bin dieses posting, weil dies hilfreich sein könnte für newbies wie mich. Ich benutzte die nichtig ist Lösung (oben) um es vollständig zu machen. Auf den ersten, ich habe die Prüfung ohne Durchführung der reverse-Methode war es, die zeigen das problem, wie erwähnt, in der ursprünglichen Frage. Dann habe ich den test nach Umkehrung der zahlen in positive und negative Fall und es funktionierte.