# Ziffern einer Zahl auslesen



## artacademy (18. Juni 2008)

Hallo,

ich brauche eine Zahl (long int) in seine Ziffern zu zerlegen. Wie mache ich das am Besten? Die Beiträge in diesem Forum dazu, habe ich gelesen. Gibt es keinen anderen Weg als das integer in ein string umzuwandeln usw.. ? 



PS: Die Aufgabe, die ich versuche zu lösen ist ziemlich einfach: Ich will alle Zahlen zwischen 0 und 1000 durchgehen, und überprüfen ob sie sich als die Summe der Faktoriellen der einzelnen Ziffer darstellen lassen. Also so was wie: xyz =?= x! + y! + z! 
Beispiel: 145 = 1! + 4! + 5!

Vielen Dank für Eure Hilfe im voraus

artacademy


----------



## SGSSGene (18. Juni 2008)

Bin mir nicht sicher, es sollte mit Hilfe des Modulo operator gehen.
z.B. so
ein wenig Pseudocode der es veranschauen soll:

```
zahl = 254 //Die Zahl die Zerlegt werden soll.
temp = zahl % 10 // Es bleibt 4 übrig
z1 = temp;

zahl = zahl - temp; //Hier steht nun 250
temp = zahl % 100 // es bleibt 50 übrig, um diese nun zu verwenden könnte man einfach durch 10 teileb
z2 = temp / 10;

zahl = zahl - temp; //Hier steht nun 200
temp = zahl % 1000; // Es bleiben 200 übrig, durch 100 teilen um diese Zahl zu verwenden.
z3 = temp / 100;
```

Nun stehen in z1 - z3 die einzelnen Ziffen.

mfg
Gene


----------



## Eichel65 (18. Juni 2008)

Gene hat recht... wenn du mit Modulo arbeitest kannst du jede Zahl aus einer längeren Ziffernfolge rauspicken ;D

d.h.
123456 % 10 = 6
123456 % 100 = 56 / 10 = 5
123456 % 1000 = 456 / 100 = 4
123456 % 10000 = 3456 / 1000 = 3

Ich nehme an daraus kannst du selbst einen Algorithmus ableiten....
( sry Gene ich hab mir deinen Algo noch nicht angeschaut ) aber ich weiss das Gene das selbe meint... ;D

Gruß


----------



## SGSSGene (18. Juni 2008)

bei steht eigentlich genau das gleiche, nur nicht so gut auf den Punkt gebracht.^^


----------



## devDevil (18. Juni 2008)

Hm und woher wisst ihr, wie lang die Zahl nun ist?  Die Lösung liegt im Logarithmus! Mit Modulo kann man dann auf die einzellnen Stellen zugreifen. Aber um zu wissen, wie viele Stellen man überhaupt hat - log.


----------



## RedWing (18. Juni 2008)

Hallo,



devDevil hat gesagt.:


> Hm und woher wisst ihr, wie lang die Zahl nun ist?  Die Lösung liegt im Logarithmus! Mit Modulo kann man dann auf die einzellnen Stellen zugreifen. Aber um zu wissen, wie viele Stellen man überhaupt hat - log.



man braucht die Länge der Zahl nicht unbedingt, wenn man die einzelnen Ziffern nicht gerade in einem Array ablegen will, da man als Abbruchbedingung einfach die Restzahl 0 nehmen kann.

Gruß,
RedWing


----------



## devDevil (18. Juni 2008)

? Was ist, wenn eine Stelle 0 ist!


----------



## RedWing (18. Juni 2008)

devDevil hat gesagt.:


> ? Was ist, wenn eine Stelle 0 ist!



Dann ist die momentan ausgerechnete Stelle eben 0  Versteh nicht ganz auf was du hinaus willst... Ich rede von der Restzahl nicht von der temporären Ziffer.

Gruß,
RedWing


----------



## devDevil (18. Juni 2008)

Ich rede davon, dass du nicht feststellen kannst, ob du am Ende der Zahl angekommen bist, wenn du hingehst und einfach darauf wartest, dass 0 rauskommt!

... 0 ... % 1 ... = 0 / 1 ... = 0
Damit muss aber nicht das Ende gegeben sein! Deswegen erst Länge berechnen, dann einfach per for-Schleife durchgehen.


----------



## RedWing (18. Juni 2008)

Hallo,



devDevil hat gesagt.:


> Ich rede davon, dass du nicht feststellen kannst, ob du am Ende der Zahl angekommen bist, wenn du hingehst und einfach darauf wartest, dass 0 rauskommt!
> 
> ... 0 ... % 1 ... = 0 / 1 ... = 0
> Damit muss aber nicht das Ende gegeben sein! Deswegen erst Länge berechnen, dann einfach per for-Schleife durchgehen.



Ich denke wir reden aneinander vorbei. Verzeih mir wenn ich keine Lust habe zu diskutieren 

Probier mal bitte das Beispiel bei dir aus und überdenk deine Überlegung nochmal:


```
#include <stdio.h>

int main()
{
  int number = 205, temp, pot = 10, ziffer;

  do {
    temp = number % pot;
    ziffer = temp / (pot / 10);
    printf("%d\n", ziffer);
    pot *= 10;
    number -= temp;
  } while (number != 0);

  return 0;
}
```
Gruß,
RedWing


----------

