Python-reverse-integer mit Rekursion
Arbeite ich an einem problem, das umkehren müssen einen integer-Eingabe ohne mit list oder string.
Aber mein Programm nur die ersten und die letzten Ziffern.
def reverseDisplay(number):
if number<10:
return number
else:
return reverseDisplay(number//10)
def main():
number=int(input("Enter a number:"))
print(number%10,end='')
print(reverseDisplay(number))
main()
Es scheint, wie die reverse-Funktion nur funktionierte nur einmal.
InformationsquelleAutor user1718826 | 2012-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte dies funktionieren:
Könnte man auch reduzieren Sie die Anzahl der Zeiten, die Sie anrufen
log10
und Anzahl der mathematischen Operationen mithilfe einer geschachtelten rekursiven Funktion:InformationsquelleAutor John Gaines Jr.
Läuft es mehrere Male, aber es gibt nur die am weitesten Links stehende Ziffer. Es ist ziemlich leicht zu sehen, dass dies der Fall ist, wenn man bedenkt, unter welchen Umständen die
if
wahr werden.Diese Arbeit zu machen, müssen Sie in den zahlen, die Sie übersprungen, wie Sie gehen aus der Rekursion. Die folgenden Werke, indem Sie einfach Heften Sie die übergebenen Ziffern Links von dem vorherigen Ergebnis. Ich würde lieber tun Sie es, ohne die string-Konvertierung, aber ich konnte nicht kommen mit einer eleganten Art und Weise zu tun, dass...
InformationsquelleAutor Allan
Hier ist, wie es funktioniert... (ich habe gekennzeichnet der Linien Im Bezugnahme auf hier)
InformationsquelleAutor Sheena
Können Sie dies durch die Pflege eine extra Zahl, die Spur hält, wie viele Ziffern behandelt wurden bereits.
Diese kann getan werden, mit einem wrapper-Funktion:
Die Idee ist, die Zähler zu behalten, wie viele nachgestellte Nullen hinzufügen, um die aktuelle Zahl zu machen, die neben der Arbeit.
Verfolgung durch diese wäre:
InformationsquelleAutor Aamir
Unter der Annahme, dass die Rekursion nicht verpflichtet war (immer eine gute Idee, Sie zu ersetzen durch iteration, wenn leicht möglich ist), schlage ich den folgenden code. Ich änderte den Namen der Funktion, für Klarheit und vermeiden Sie auch den overkill der Potenzierung und Logarithmus-Operationen in anderen Kommentaren.
Mit ein paar änderungen, dies wäre eine viel bessere Lösung als meine. Ändern Sie einfach isinstance(n, int) isinstance(n, (int, long)) zu erlauben, es zu handhaben, beliebig lange zahlen, und gelten pep8 (4 Leerzeichen eingerückt). Es ist ca 4x schneller als bei meinem ersten und bis zu 2x schneller als meine zweite Lösung.
InformationsquelleAutor guidot
Edit: Das ist eine funktionierende Lösung.
Ergebnis:
Gaines Jr Behoben.
InformationsquelleAutor Akavall
Dies ist, was ich getan habe
InformationsquelleAutor Vasco
InformationsquelleAutor Mahesh Kumar Ronde
Sollte dies funktionieren : geprüft auf Python ist3
Wenig modifizierte version:
InformationsquelleAutor Jayant
InformationsquelleAutor Manoj Zade
InformationsquelleAutor user4301398
aber das würde einen falschen Wert zurückgeben, d.h. die Eingabe 123 ist, und die Ausgabe ist 3136.
Dies ist nicht korrekt.
InformationsquelleAutor Tao Peng