Integer umdrehen in Python?

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Nein. Eine mathematische Operation "Zahl umdrehen" ist nicht definiert.

Keine Umwandlung in Strings bitte!!

Du hast, um die Aufgabe zu definieren, selbst eine Stringoperation vorgenommen: "123456" ist ein String und Du hast ihn zu dem String "654321" umgedreht. Das ist es, was Du von dem Programm willst.

Klar, statt mit der direkten Stringumkehr geht das auch über den vergleichsweise umständlichen mathematischen Umweg, den Over9000IQ, gfntom und Isendrak gezeigt haben. Auch dabei kommst Du nicht um die Umwandlungen String->Zahl und Zahl->String drum herum, nämlich bei der Ein- und Ausgabe.

Der mathematische Umweg funktioniert, weil diese Strings aus Ziffern des Dezimalsystems bestehen, und in den Programmiersprachen standardmäßig als numerische Literale zur Ziffernbasis Zehn akzeptiert werden, d.h., als Strings die sich unter Zugrundelegung der Ziffernbasis Zehn als Zahlen interpretieren lassen.

Die hier gezeigten Programme tun genau das, und wandeln die verwendeten Strings "123456" und "10" als erstes in maschineninterne Binärdarstellungen der btr. Zahlen um. denen die gedachte Ziffernbasis Zwei zugrunde liegt, und die z.B. in einem 32-Bit-Maschinenregister (wenn man die Schaltzustände wieder durch Ziffern symbolisiert) so "aussehen":

00000000000000011110001001000000

und

00000000000000000000000000001010 (für die Zehn, in Dezimalziffern "10")

Die Bitfolge für "123456" wandeln die von den Kollegen gezeigten Programme nun in eine andere Bitfolge um:

00000000000010011111101111110001

Sobald eine print-Anweisung kommt, wandeln die Programme diese Bitfolge dann unter der Annahme, daß eine Zahl gemeint ist, wieder in den entsprechenden Dezimalziffernstring um: "123456".

Umgedreht wird, egal, wie man es macht, nicht die Zahl, sondern der String, der der btr. Zahl unter der Annahme einer bestimmten Ziffernbasis zugeordnet ist.


Franz1957  12.11.2019, 03:22

Upps, Fehler. Es sollte heißen:

Sobald eine print-Anweisung kommt, wandeln die Programme diese Bitfolge dann [...] um: "654321"

1
number = 123456
reverse = 0
while number > 0:
    number, digit = divmod(number, 10)
    reverse = reverse * 10 + digit

Achtung: Bei Zahlen, die auf 0(en) enden kommt es zu einem "lustigen" Effekt: 12300 -> 321, das ganze erneut umgekehrt: 321 -> 123.


Franz1957  12.11.2019, 03:17

Der lustige Effekt verrät, daß es hier gar nicht wirklich um Zahlen geht, und das Rechenverfahren nur auf dem Mißverständnis beruht, daß es um Zahlen ginge.

Auch "Postleitzahlen" sind ja keine Zahlen und wer sie als solche mißversteht und beim Programmieren eines Postadress-Systems mit einem Integer-Datentyp darzustellen versucht, wird mit Adressen in Sachsen und den angrenzenden Gebieten eine Überraschung erleben.

2

in weniger als ein paar sekunden googeln gefunden

Number = int(input("Please Enter any Number: "))    
Reverse = 0    
while(Number > 0):    
    Reminder = Number %10    
    Reverse = (Reverse *10) + Reminder    
    Number = Number //10    
     
print("\n Reverse of entered number is = %d" %Reverse)

andie00  11.11.2019, 21:29

10 ergibt 1

1
andie00  11.11.2019, 21:44
@Over9000IQ

Kommt drauf an was sich der Fragesteller erwartet, obs im Ergebnis egal ist wenn die Nullen am Ende der Ausgangszahlen fehlen oder nicht.

z.B. 10, 100, 1000 usw. sind alle 1

0
Over9000IQ  11.11.2019, 21:50
@andie00

das liegt aber am integer der Fragesteller will das explizit mit integer machen sagt er doch

0
andie00  11.11.2019, 22:09
@Over9000IQ

Stimmt, das muß er halt beachten, oder die Anzahl an Stellen mit zählen.

0

Ich habe mit Python zwar keine Erfahrung, da dies aber in jeder Programmiersprache machbar ist (weil es ein rein mathematisches Problem ist), bin ich sicher, das geht auch in Python.

Beschreibend:

Neue Zahl = 0

Schleifenstart:

Neue Zahl = Neue Zahl * 10
Neue Zahl = Zehnerrest der alten Zahl + neuen Zahl
alte Zahl = Ganzzahldivision der alten Zahl durch 10
Wenn alte Zahl > 0: weiter mit Schleife
sonst: fertig

Du machst es so, dass du jede einzelne Ziffer der Zahl „ausrechnest“. Also

(x mod 10000)= 0 (oder so ähnlich)

das dann als ‚a‘

das machst du mit allen Stellen der Zahl und speicherst die in anderen, dann gibst du diese einfach andersrum aus. (so würde ich es machen)

Ich vermute, dass es das ist was du vermeiden willst😂

edit: sorry bin in der falschen Sprache😂

Woher ich das weiß:eigene Erfahrung