wie kann ich bestimmen, ob eine eingegebene Zahl eine Schnapszahl ist in c#?

3 Antworten

Indem du schaust, ob alle Ziffern der Zahl identisch sind, und es sollten schon mehr als eine Ziffer sein.

Du kannst z.B. eine beliebige Ziffer der Zahl nehmen, und mit einer anderen Zahl, welche nur aus Einsen besteht und genauso viele Ziffern hat wie deine Zahl, (aber mehr als eine) multiplizieren. Wenn das Resultat identisch mit deiner Zahl ist, handelt es sich um eine Schnapszahl.

So wie in: 5555, eine beliebige Ziffer davon wäre 5, mit 1111 multiplizieren, und Resultat 5555 mit 5555 vergleichen - voila, eine Schnapszahl.


Erzesel  18.04.2023, 08:29

unflexibel, um einen 32bit uInteger zu prüfen müsstest Du erstmal all EinserZahlen (11..111111111) mit allen Ziffern testen im ungünstigsten Fall 75 Iterationen

0
Bushmills145  18.04.2023, 08:41
@Erzesel

Ich muss nur sicher sein, dass sich die Anzahl der Ziffern noch vom Typ dargestellt werden kann. Also 9 Ziffern im Fall von 32 bit Zahlen, egal ob int oder uint. Die zu prüfende Zahl muss das allerdings ebenfalls. Einsen Testen ist unnötig.

Im Fall von einer neunstelligen Zahl sähe dies so aus:

666266666 Schnapszahl? Beliebige Ziffer davon (2 oder 6) mit neunstelliger Zahl aus Einsen bestehend (111111111) multiplizieren, ergibt, je nach gewählter Ziffer , 222222222 oder 666666666. Vergleich mit 666266666 ergibt "keine Schnapszahl".

wie eine 9-stellige 1 erhalten? (1E(9+1)-1)/9.

Zahl als String, mit Einzelziffern, behandeln, ist natürlich eine Alternative - aber warum sich mit einzelnen Ziffern bemühen (oder bemühen lassen), wenn eine arithmetische Behandlung dies unnötig macht.

Sollte die Zahl aber bereits als String vorliegen, statt als int oder uint, dann würde ich vermutlich auch von Konversion zu numerischen Wert absehen, sondern den String auch als solches verarbeiten.

1
Bushmills145  18.04.2023, 10:35
@Erzesel
: 10^    ( u1 -- u2 )  10e0 s>f f** f>s ;
: places ( u1 -- u2 )  s>f flog f>s 1+   ;
: schnaps ( u -- flag ) dup places 10^ 1- 9 / mod 0= ;

5555555555555555 schnaps . -1  ok
5555552555555555 schnaps . 0  ok



0
wie kann ich bestimmen, ob eine eingegebene Zahl eine Schnapszahl ist in c#?

Rein von der Logik: Merke dir die letzte Ziffer (per Modulo 10). Anschließend iterierst du über die Zahl (durch wiederholtes Teilen durch 10 und Modulo 10) und vergleichst die momentane Ziffer mit der gemerkten Zahl.

Woher ich das weiß:Studium / Ausbildung – Abgeschlossenes Studium der Informatik (B.Sc.)