Wie kann ich ganz einfach die quersumme einer Zahl in C++ berechnen?
Ich bin noch ein Anfänger in C++ und habe 2 Probleme. Und zwar ist mein Ziel ganz einfach eine Anwendung zu programmieren, das in der Lage sein soll die quersumme einer Zahl zu berechnen. Leider klappt das nicht so, wie es klappen sollte. Den wenn man eine 4 stelligen Zahl eingeben möchte, muss man nach jeder einzelnen Zahl die leertaste betätigen um die nächste Zahl eingeben zu können. Weil sonst wird die Eingabe nicht berechnet. Das 2 Problem ist das Zahlen wie z.B 1888 nicht richtig berechnet werden.
#include<iostream>
using namespace std;
int main()
{
int zahl;
cout<<"Gib eine 4 stellige Zahl ein\n";
cin>>zahl>>zahl>>zahl>>zahl;
cout<<"Die quersumme ist "<<zahl+zahl+zahl+zahl<<endl;
cin.sync();
cin.get();
return 0;
}
Ich hoffe sehr ihr könnt mir behilflich sein. :)


4 Antworten
Mach einen Eingabedialog, in dem Du die ganze Zahl einliest, nicht nur ihre einzelnen Ziffern und rechne dann mithilfe %10 (gibt die letzte Ziffer) von hinten die verschiedenen Ziffern zusammen. Dann musst Du Dich auch was die Stellenanzahl angeht nicht festlegen.
Probier's jetzt erstmal selber und schau Dir dann meine Lösung an.
int main(){
int zahl, quersumme = 0;
cout<<"Gib eine Zahl ein.\n";
cin>>zahl;
while(zahl > 0){
quersumme += zahl%10;
zahl /= 10;
}
cout<<"Die Quersumme ist "<<quersumme<<endl;
cin.sync();
cin.get();
return 0;
}
Es wird immer die letzte Ziffer der Zahl zur Quersumme hinzuaddiert und anschließend die Zahl ganzzahlig durch 10 geteilt (dadurch wird aus 568 beispielsweise 56.8, also ganzzahlig 56), bis die Zahl gleich 0 ist (5/10 ist dann 0.5 und ganzzahlig 0).
Also gar kein komplexer Algorithmus.
LG
Zuerst kannst du die Zahl in einen String konvertieren. Danach Länge des Strings messen. Nun Schleife laufen lassen, jede Ziffer einzeln aufrufen und in eine Zahl konvertieren. Nun Quersumme errechnen.
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
/*
* main.cc
* Copyright (C) 2017 Josef Wismeth <josef.wismeth@t- online.de>
*
* quersumme is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* quersumme is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, sehttp://www.gnu.org/licenses/es/>.
*/
#include <iostream>
#include <sstream> // wegen _itoa
#include <complex.h> // ebenfalls wegen _itoa
// Wandelt eine Dezimalzahl in einen String um
std::string _itoa(int number)
{
std::ostringstream buff;
buff << number;
return buff.str();
}
//Errechnet die Quersumme einer als String gespeicherten Integer-Zahl
int iquersumme(std::string zwort)
{
int slei, sleib, lge, qsumme = 0;
char zahlsymbole[10] = { '0','1','2','3','4','5','6','7','8','9'};
lge = zwort.length();
for (slei = 0; slei < lge; slei++)
for (sleib = 0; sleib < 10; sleib++)
if (zwort[slei] == zahlsymbole[sleib])
qsumme += sleib;
return qsumme;
}
int main()
{
int zahl = 1234, quersumme = 0;
std::string zahlwort;
std::cout << "Bitte Zahl eingeben: ";
std::cin >> zahl;
zahlwort = _itoa(zahl);
std::cout << "Zahl als String: " << zahlwort << std::endl;
quersumme = iquersumme(zahlwort);
std::cout << "Quersumme: " << quersumme << std::endl;
return EXIT_SUCCESS;
}
Das Problem ist, dass du nicht eine 4 stellige Zahl einliest, sondern 4 Zahlen, die je von -2147483648 bis 2147483647 gehen können... (ausser int hat auf deiner Plattform zufälligerweise !=32 Bit...)
P.S.: So gehts:
#include <iostream>
int quersumme(int zahl){
int ergebnis = 0;
while(zahl > 0){
//Rest der Division durch 10 (also die letzte Ziffer) zum Ergebnis addieren
ergebnis += zahl % 10;
//"zahl" dezimieren (bei int u.ä. werdedn Nachkommastellen abgeschnitten)
zahl /= 10;
}
return ergebnis;
}
int main(int argc, char *argv[]){
std::cout << "zahl: ";
int zahl;
std::cin >> zahl;
std::cout << "die quersumme von " << zahl << " ist " << quersumme(zahl) << "." << std::endl;
}
zahl macht keine Puffer für die Eingaben. Es ist einfach die letzte Zahl die eingegeben wird. gäbe man ein 1 2 3 100, wäre das Ergebnis 400.
Entweder nimmst du eine Methode die nur einzelne Zeichen einliest, oder du übernimmst die Zahl, konvertierst sie in einen String und arbeitest dann auf diesem weiter.