Forum: Compiler & IDEs Zahl in ihre einzelnen Ziffer zerlegen


von neumond (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Andreas B. (andreas_b77)


Lesenswert?

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.

von Klaus D. (kolisson)


Lesenswert?

ist es nich naheliegender und auch einfacher das ganze als String
zu sehen.
Da käme man mit MID$ ja schon zum Ziel.
Über Val(Mid$) auch zum Wert.

k.

von Oliver (Gast)


Lesenswert?

Das allereinfachste ist es, wenn ihr eure Hausaufgaben zusammen macht...

Beitrag "Anzahl der Ziffern in Zahl feststellen, vorgehensweise mit Logarithmus?"

Oliver

von Peter (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.