Zwei Aktionen mit einer Eingabe
-
Hallo
Ich bin C-Anfänger und habe folgende Frage. Ich will eine positive Int Zahl eingeben und diese soll geprüft werden ob sie durch 4 teilbar ist. Zudem soll abschließend die komplette eingegebenen Zahl z.B 3452646 geprüft werden ob die Quersumme durch 4 teilbar ist...#include <stdio.h> main() { int x,y; printf("Bitte pos. Integer Zahl eingeben\n"); scanf("Zahl: %i",&zahl); if (zahl%4==0) printf("Durch 4 teilbar"); else printf("Nicht durch 4 teilbar"); }
So müsste das doch eigentlich schonmal gehen, dass er durch 4 teilt bzw. das testet...
Aber wie mache ich das jetzt, dass er die ganzen eingegebenen Zahlen z.B. 355254 also Quersumme addiert und diese dann nochmals testet ob sie durch 4 teilbar ist?Danke schonmal für die Hilfe!!!
-
zzzboard schrieb:
So müsste das doch eigentlich schonmal gehen, dass er durch 4 teilt bzw. das testet...
Ja vermutlich, wenn du das fehlende Semikolon, die fehlende Variablendeklaration und den fehlenden Rückgabewert von main() ergänzt
Aber wie mache ich das jetzt, dass er die ganzen eingegebenen Zahlen z.B. 355254 also Quersumme addiert und diese dann nochmals testet ob sie durch 4 teilbar ist?
Die Quersumme kannst du berechnen, indem du mit modulo 10 einzelne Ziffern betrachtest. Also
int quersumme = 0; while (zahl) { quersumme += zahl % 10; zahl /= 10; }
-
ja danke es funktioniert...und die Fehler hab ich behoben! danke für die Hinweise!
aber kannst du mir noch kurz die while-schleife erklären, wie die funktioniert?
int quersumme = 0; while (zahl) { quersumme += zahl % 10; zahl /= 10; }
Die Schleife wird solange durchlaufe bis zahl = 0, richtig ?
dann wird die quersumme berechnet indem ich die zahl modulo 10 rechner..
bsp. 102 mod 10 = 2
also wird in quersumme = 2 gespeichert
jetzt wird zahl durch 10 geteilt also kommt da 10 raus da int und somit keine Nachkommastellen....
nun steht 10 in der Schleife bei while aber 10 % 10 ist doch 0!Also wird die 0 noch draufaddiert auf die 2 und somit hätte ich die 2 als Quersumme?! Sie müsste aber 3 sein?!
-
Nachdem die 0 dazuaddiert wurde, ist zahl ja immernoch 10. Das wird dann durch 10 geteilt, also ist zahl 1. Es gibt also noch einen Schleifendurchgang, bei dem dann 1 zu quersumme addiert wird (so dass sich drei ergibt). Dann wird zahl nochmal durch 10 dividiert, diesmal ergibt sich aus 1/10 durchs Abrunden 0 und die Schleife endet.
-
OK sauber.... alles verstanden!
besten Dank für die Hilfe!!!