Zahl in ihre einzelnen Ziffer zerlegen

Gast #2531257
Hallo,

ich möchte eine Zahl in ihre einzelnen Ziffer zerlegen.

Als prinzipielle Möglichkeit würde mir einfallen, die Zahlen potenzen zu 
dividieren und dann irgendwie mit dem Modulo rumzuhantieren.

Also Beispiel:

23456

23456 / 10^4
3456 / 10^3
456 / 10^2
56 / 10^1

Dann brauch ich ja noch ein Modulo.

Mein Code funktioniert leider nicht :-(, villeicht findet ihr ja den 
Fehler :-)

1
uint16_t ganze_Zahl = 23456;
2
uint8_t ziffer1;
3
uint8_t ziffer2;
4
uint8_t ziffer3;
5
uint8_t ziffer4;
6
uint8_t ziffer5;
1
ziffer1= (ganze_Zahl / 10e4);
2
ziffer2= ziffer1 / 10e3;
3
ziffer3= ziffer2 / 10e2;
4
ziffer4= ziffer3 / 10e1;
5

6
ziffer1= ziffer1 % 10e4;
7
ziffer2= ziffer2 % 10e3;
8
ziffer3= ziffer3 % 10e2;
9
ziffer4= ziffer1 % 10e1;
10
ziffer5= ziffer1 % 10e0;


Bin noch ein ziemlicher C Anfänger und schreib gerade mein erstes 
Programm


Gruß neumond
#2531280
ok.
Der Ansatz ist ja grundsätzlich schon mal nicht schlecht.
Aber du kannst das ganz formal auch einfacher machen, wenn du 
beobachtest, dass

    23456 % 10           ->  6
    23456 / 10 -> 2345

     2345 % 10           ->  5
     2345 / 10 -> 234

      234 % 10           -> 4
      234 / 10 -> 23

       23 % 10           -> 3
       23 / 10 -> 2

        2 % 10           -> 2
        2 / 10 -> 0

Du brauchst also die 10-er Potenzen in Wirklichkeit gar nicht. Mit jeder 
Division durch 10, schneidest du am rechten Ende eine Stelle ab. Und was 
diese Stelle war, verrät dir eine vorhergehende Modulo Division. 
Einziger Nachteil: die Stellen fallen dir in umgekehrter Reihenfolge 
heraus. Aber so ein Problem ist dass dann auch wieder nicht.
#2531551
Das alles ist natürlich nicht anderes als eine Binär-zu-Dezimal 
Konvertierung  wie man sie auch zur Ausgabe von Variablen als lesbare 
Dezimalzahl braucht und da wurde schon viel dazu geschrieben.

Aber ganz wichtig:
1
ziffer2= ziffer1 / 10e3;

Vorsicht mit Exponenten. Zahlen mit Exponenten sind generell von der Art 
Floating Point, was hier keinen Sinn macht und wohl kaum beabsichtigt 
war. Zweitens bedeutet das E bereits "mal 10 hoch Exponent", also ist 
10e3 = 10.0*10³ = 10000.0. Will man 1000.0 schreibt man 1e3.
Gast #2531732
Wenn mans nicht eilig hat würde ich es über itoa und sprintf machen.
Je nach Anwendung kommt es natürlich darauf an ob man genügend Zeit, RAM 
und FLASH hat.
Ansonsten wie schon beschrieben zu Fuss

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.