C Ziffernsumme mit while Schleife?
Könnte mir wer helfen was da falsch ist? Sobald ich 10 oder mehr Zeichen eingebe stimmt es nicht/rechnet komplett falsche Werte aus.
#include <stdio.h>
int main()
{
int number;
int digitSum = 0;
int i;
printf("Bitte eine ganze Zahl eingeben: ");
scanf("%d", &number);
while(number != 0)
{
digitSum = digitSum + number % 10;
number = number / 10;
}
printf("Ziffernsumme: %d", digitSum);
return 0;
}
4 Antworten
Naja, ein int halt auch auch einen definierten Zahlenbereich. Wenn Du den überschreitest, passieren komische Dinge (z.B. geht's eventuell im Negativen wieder los).
Schlauer wäre, die Zahl als String eingeben zu lassen und dann Stelle für Stelle zu summieren.
Der Wertebereich eines Itn umfasst 2^23 ~ 4Mrd verschiedene Werte. Dir wird auffallen, daß das eine 10 stellige Zahl ist.
Nehme mal eine 10-stellige Zahl <2 Mrd und es sollte noch korrekt sein.
Im Zweifelsfall einfach einen unsigned long nehmen oder gleich eine Zeichenkette nehmen (Wie bereits vorgeschlagen).
Wenn du meinst, dass bei einer sehr großen Zahl falsche Ergebnisse raus kommen, kann das daran liegen, dass du einen Integer Overflow hast. Du verwendest ja einen signed int mit vermutlich 32 Bit, also kannst du Zahlen zwischen -2^31 und 2^31 -1 speichern. ( zwischen -2147483648 und +2147483647 ).
Wenn du nur positive Zahlen benötigst kannst du aus deinem int ein unsigned int machen. Ansonsten kannst du, wenn es deine Architektur zulässt, auch 64 Bit integer verwenden, über die Bibliothek <stdint.h>
https://stackoverflow.com/questions/9606455/how-to-specify-64-bit-integers-in-c
für große zahlen könntest du long long oder strings nehmen