C++ Quersumme errechnen?

9 Antworten

Für die Quersumme:

#include <iostream>

//"Normale" Quersumme
int quersumme(int zahl){
//Initialisiere eine Variable für das Ergebnis
int ergebnis = 0;
while(zahl > 0){
//Addiere den Rest der Division "zahl/10" zum Ergebnis.
ergebnis += zahl % 10;
//Dividiere "zahl" durch 10 und setze den Wert von Zahl auf den Quotienten. (Beim "int" werden die Nachkommastellen dadurch abgeschnitten.)
zahl /= 10;
}
//Gebe das Ergebnis an die aufrufende Stelle zurück.
return ergebnis;
}

//Das Ergebnis hat exakt eine Stelle (0-9)
int iterierte_quersumme(int zahl){
//Initialisiere eine Variable für das Ergebnis
int ergebnis = quersumme(zahl);
//Solange "ergebnis" größer oder gleich 10 ist...
while(ergebnis >= 10){
//Setze den Wert von "ergebnis" auf die Quersumme von "ergebnis".
ergebnis = quersumme(ergebnis);
}
//Gebe das Ergebnis an die aufrufende Stelle zurück.
return ergebnis;
}

int main(int argc, char *argv[]){
//Test 1: Sollte 10 ergeben.
std::cout << "quersumme(1234) = " << quersumme(1234) << std::endl;
//Test 2: Sollte 24 ergeben.
std::cout << "quersumme(7278) = " << quersumme(7278) << std::endl;
//Test 1: Sollte 1 ergeben.
std::cout << "iterierte_quersumme(1234) = " << iterierte_quersumme(1234) << std::endl;
//Test 1: Sollte 6 ergeben.
std::cout << "iterierte_quersumme(7278) = " << iterierte_quersumme(7278) << std::endl;
return 0;
}

Zu den Arrays: Die sind in diesem Fall weniger hilfreich als mehr verwirrend bzw. überflüssig.


markusb0815  23.03.2017, 13:33

Im Prinzip meine Version, nur das ich den Modulo Operator "ignoriert" habe. So kann man sich noch eine Zeile sparen ^^

0
Isendrak  23.03.2017, 21:53
@markusb0815

Dabei ist "Modulo  10" für diesen Zweck geradezu prädestiniert... ;)

0

du könntest das Problem auch mit einer Whileschleife lösen

Vorher eine Abfrage, dass die zahl nicht größer als 99 sein darf.

dann einfach eine Schleife, die der eingegebenen Zahl 10 abzieht und das so lange, wie die Zahl größer 10 ist. Gleichzeit zählt ein counter hoch.

zB eingegebene Zahl 23

schleife läuft 2x durch, übrig bleibt 3 und schon hast ebenfalls beide zahlen.

Bei größeren Werten bleibt dir wie hier schon erwähnt nur noch die Konvertierung in einen anderen Datentypen



markusb0815  23.03.2017, 12:54

Wieso sollte man das auf Zahlen kleine 100 beschränken? Ein sinnvoller Algorithmus (siehe meine Funktion) braucht keine Einschränkung und funktioniert allgemein.

0
markusb0815  23.03.2017, 13:34
@virin1

Es geht ja darum, dass der Fragesteller was lernen will. Es macht keinen Sinn die Bedingungen so einzuschränken damit ein schlechter Algorithmus auch noch funktioniert!

1
Wissensjunkie22 
Beitragsersteller
 23.03.2017, 12:36

Das klingt gut umd einfach zu schaffen für den Anfang danke für deine Idee.

0

Wandel die eingabe doch in einen String um. Ein String ist ja ein Char Array, somit kannst du dann jede einzelne Ziffer in deinem String Array dann per Index anspringen und so die Quersummer berechnen.

Und wenn du scho dabei bist, eine Prüfung ob jemand vielleicht eine ungültige Zahl, wie 1A eingegeben hat kannst du dann auch gleich einbauen.


Wissensjunkie22 
Beitragsersteller
 23.03.2017, 12:37

Ich werds versuchen danke für deine Antwort

0

"Zerstückeln" kannst du eine Zahl, wenn du weißt, wie eine Zahl grundsätzlich "aufgebaut" ist.

Bei einer Dezimalzahl ist das:

a*10^0 + b * 10^1 + c * 10^2 usw.

Deine Aufgabe ist es nun die Faktoren zu bestimmen.


markusb0815  23.03.2017, 13:32

Und wie das geht steht in meiner Antwort ^^

Im Prinzip einfach indem man mehrmals eine Integerdivision durch 10 durchführt.

0

Noch besser, als Methode/Funktion:

int quersumme(int zahl)
{
int hilf;
int quer = 0;
while (zahl != 0)
{
hilf = zahl;
zahl = zahl / 10;
quer += hilf - (zahl*10);
}
return quer;
}

Aufruf wäre dann beispielsweise:

int q = quersumme(1234);

==> in q steht 10;