Einzelne Ziffern einer Zahl
-
Hallo,
wie bekomme ich die einzelnen Ziffern einer Zahl raus, die ich einlese?
Ich hab es schon mit einem Array probiert, aber da muss ich ja schon im
voraus sagen wie gross es ist - das entscheidet sich ja aber erst bei der Eingabe.Danke für Hilfe!
-
entweder du wandelst die zahl in einen string
(char-array) um (schau dir mal: sprintf, strtol, strtod an)
oder du teilst die zahl immer durch 10
bis du alle ziffern hast.
-
Das ist ja so ein Problem. Ich kann es auch nicht parsen, denn ich muss ja erst
mal angeben, wie gross das array sein soll - zumindest meldet der Compiler immer einen Fehler wegen der Array-Grösse. (Ich darf auch nur die stdio.h Bibliothek verwenden)#include <stdio.h> int main() { int b; int zahl; char text[]; printf("Zahl: "); scanf("%d", &z); printf("Basis: "); scanf("%d", &z); text = (char)z; return 0; }
Danke für weitere Tipps!
-
int hat auf PCs (das ganze portabel zu machen ist etwas schwerer) 32 bit, dh etwa -2 Milliarden bis +2 Milliarden als Wertebereich. Macht maximal 10 Ziffern plus Vorzeichen, also 11 Zeichen. Dein Array sollte also 12 Zeichen groß sein (noch ein Element fürs '\0').
-
-
@mady Ich darf nur die stdio.h benutzen....leider *g*
Vielleicht kann ich auch ganz anders an mein Problem rangehen, wenn ich es einfach mal konkret formuliere.
Ich lese zwei zahlen ein, die zweite gibt eine Basis an.Basis ist z.B. 8 und meine Zahl ist 354:
Dann soll ich rechnen: 3*8^2 + 5*8*1 + 4*8^0
Deshalb brauche ich jede einzelne Ziffer der der Zahl 354, um entsprechend
multiplizieren zu können. Ich dachte ich packe sie in ein array und durchlaufe dann mit einer for-Schleife jedes Element bzw. multipliere, bis das Ende erreicht ist.
-
Du führst einfach immer wieder folgende Wertzuweisungen aus:
while(zahl>0){ ziffer=zahl%10; zahl/=10; ... }
Durch das Modulo-Nehmen der Zahl durch 10 erhältst du immer die hinterste Ziffer. Z.B. ist 23%10=3...
Mit dem Dividieren durch 10 "schreitest" du in der Zahl eine Ziffer nach vorne, z.B. bei 23/10=2...
Das Ganze tütest du in eine while-Schleife ein, die dann stoppt, wenn zahl 0 wird (hab grad nicht getestet, ob das mit der Abbruchbedingung genau hinhaut , probier einfach mal aus...).