title image


Smiley Re: Integer Zahl Ziffernweise abspeichern
Hi





Lösungsansatz:

Ich gehen von der Zahl 347 aus:

If Schleife ob die Zahl 10 Ziffern hat

-"- 9 Ziffern hat

.

.

.

3 Ziffern hat =true



... also .... der Ansatz ist schonmal trash... :-)



Die Anzahl der Ziffern einer Zahl kann man mit der log-Funktion ausrechnen. Die gibt den natürlichen Logarithmus zurück - den du (als Ingenieur) sicher leicht in einen Logarithmus zur Basis 10 umrechnen kannst.



#include <math.h>

...

int anzahlStellen(int zahl) {

double logE = log(zahl);

double log10 = ... your task ...

int stellen = ((int)log10) + 1;

}





Damit weißt du schonmal, wo die Schleife anfängt.



int zahl = 347;

int stellen = anzahlStellen(zahl);

// 'stellen' hat jetzt den wert 3





Deine restliche Vorgehensweise ist schon nicht ganz falsch... aber ein bißchen umständlich.



Weil die Zahl 3 Ziffern hat wird die Zahl durch 100 geteilt und der entstehende Komma Wert 3,47 als float abgespeichert. Jetzt folgt eine Überorüfung ob die nachkommastelle >= *,5 ist wenn das true wäre dann wird - 0,5 gerechnet. In diesem Fall ist der Wert false also gleich der nächste Schritt.



Diese überprüfung auf >=0.5 ist überflüssig: Wenn du die 'zahl' einfach durch 100 teilst, und als int abspeicherst, bekommst du immer gleich die Ziffer, die dann für das 'switch' verwendet wird:



int wert = 347;

...

int ziffer = (int)(wert / 100); // Die 'ziffer' ist jetzt 3



aber



int wert = 397;

...

int ziffer = (int)(wert / 100); // Die 'ziffer' ist jetzt AUCH 3 !!! (Der Nachkommaanteil wird enifach abgeschnitten!)





Du kannst also aus der Anzahl der Stellen den 'teiler' berechnen:

Bei 3 stellen teiler=100

Bei 4 Stellen teiler=1000

Bei 'n' Stellen ....?ganz allgemein? (Schau dir mal die Funktion 'pow' an ;-))



Dann in jedem Schleifendurchlauf die 'ziffer' bestimmen:



...

do {

int ziffer = (int)(zahl / teiler);

// Jetzt ziffer als wort ausgeben...

...

// Jetzt neue 'zahl' und neuen 'teiler' berechnen

// (Das ist etwas einfacher, als das, was du in der Frage geschrieben hast)

zahl = zahl - ???

teiler = teiler / ???

...

} while(...)



Na, das kriegst du schon hin :-)



bye









geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: