Ziffern aus Zahl extrahieren? Brett vor dem Kopf?
-
Angenommen ich muss prüfen, ob die beiden hochwertigsten Ziffern einer 9-Stelligen Zahl 55 sind oder nicht, wie prüfe ich das möglichst elegant?
Beispiel:
551234567 -> wahr
544857482 -> falsch
550003384 -> wahr
138387474 -> falsch
100000000 -> falschIch hatte an irgendeine Maskierung gedacht oder an shiften, aber das scheint nur bei kleinen Zahlen wo man mal 1,2 Byte vergleicht angemessen zu sein.
In einen String umwandeln und dann per == ist mir irgendwie zu langsam

-
Du teilst solange durch 10, bis der Wert kleiner 100 ist.
Den Rest darfst du selber ausdenken.
-
DirkB schrieb:
Du teilst solange durch 10, bis der Wert kleiner 100 ist.
Den Rest darfst du selber ausdenken.Mein Brett ist vlt. größer als gedacht, aber schneller als durch ein Vielfaches von 10 teilen mit anschließendem Vergleich wird's nicht mehr oder?
-
Ach, du hast ja feste 9 Stellen.
Dann muss der Wert ja größergleich 550000000 und kleiner 560000000 sein.
-
DirkB schrieb:
Ach, du hast ja feste 9 Stellen.
Dann muss der Wert ja größergleich 550000000 und kleiner 560000000 sein.cout<<(wert/10000000 == 55)<<endl;

-
Kreuzschlitz schrieb:
cout<<(wert/10000000 == 55)<<endl;das ist natürlich die vermutlich einfachste und schnellste Lösung.
-
Die schnellste bestimmt nicht - Division ist ziemlich teuer. Zwar kann der Compiler das bei festem Divisor durch Multiplikationen und Bitshifts ersetzen, aber die laufzeittechnisch schnellste Lösung dürfte stumpf
if(wert >= 550000000 && wert < 560000000) { ... }sein (also so, wie DirkB es vorschlägt).
-
seldon schrieb:
Die schnellste bestimmt nicht - Division ist ziemlich teuer.
*arg* stimmt, da war ja was...
-
seldon schrieb:
Die schnellste bestimmt nicht - Division ist ziemlich teuer. Zwar kann der Compiler das bei festem Divisor durch Multiplikationen und Bitshifts ersetzen, aber die laufzeittechnisch schnellste Lösung dürfte stumpf
if(wert >= 550000000 && wert < 560000000) { ... }sein (also so, wie DirkB es vorschlägt).
Müsste das nicht wenn korrekterweise wie folgt lauten:
if(wert >= 550000000 && wert < 550000001) { ... }Bei eurer Variante existieren doch 10.000.000 Werte, für die die If-Abfrage immer true sein wird und nicht nur der eine

-
Outsider333 schrieb:
Bei eurer Variante existieren doch 10.000.000 Werte, für die die If-Abfrage immer true sein wird und nicht nur der eine

ist ja auch richtig. Nochmal in Ruhe die Aufgabenstellung lesen...
-
@Outsider333 Weniger Drogen sollen helfen beim Programmieren.

-
Mh, wenn als Vorbedingung wirklich immer gegeben sit, dass die Zahl 9 Stellen hat und vorne die 55 sein soll, dann ist das ziemlich easy, und undynamisch.
Komisch, dass nach sowas hier gefragt wird. (Aber ich kann das Brett vorm Kopf nachvollziehen ;))
-
Outsider333 schrieb:
Müsste das nicht wenn korrekterweise wie folgt lauten:
if(wert >= 550000000 && wert < 550000001) { ... }Das geht noch einfacher:
if(wert == 550000000) { ... }
Outsider333 schrieb:
Bei eurer Variante existieren doch 10.000.000 Werte, für die die If-Abfrage immer true sein wird und nicht nur der eine

Die Aufgabe war: Finden aller 9-stelligen Zahlen, die mit 55 anfangen.