Quersumme in C++ ??

Mitglied seit
19.01.2005
Beiträge
16
Renomée
0
Standort
Bremen
Halli Hallo,

steige hier im moment voll nicht mehr durch :-[

Soll die Quersumme Berechnen von 0 bis int_max also 32767 , doch ich habe anscheinend gerade voll das brett vorm kopf *noahnung*

ich muss ja jede Ziffer einer zahl abspalten und addieren, doch ich weiß nicht wie ichs machen soll... da war was mit % und dann / usw........ *kopfzerbrech*


Würde mich freuen wenn ihr mir helfen könntet :)

Gruß
PREDATOR
 
Wenn doch alles so einfach wäre :)

for (int i = 1; i <= 32767; i++)
{
char buff[16];
sprintf (buff, "%d", i);

// q ist die Quersumme einer Zahl
// falls die die Summe aller Quersummen gefragt ist,
// folgende Zeile an den Anfang stellen
unsigned long q = 0;

for (int j = 0; buff [ j ]; j++)
{
q+= (unsigned long) buff [ j ] - '0';
}
// hier ist q für eine Zahl verfügbar
cout << "q=" << q << endl;
}

Edit: Fehler beseitigt
 
Zuletzt bearbeitet:
???? nix versteh (liegt vielleicht an der uhrzeit ) ??? ???

soweit bin ich bis jetzt:

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>

using namespace std;

int main () {
int nI;
int nMerker=0;

for (nI=0; nI<32767; nI++) {

nI%10==nMerker;

cout << nI <<" " << nMerker << endl;
}

system ("PAUSE");





return 0;
}
 
???? nix versteh (liegt vielleicht an der uhrzeit ) ??? ???
Bei meiner Lösung printe ich die Binärzahl als ASCII-Zahl in einen Buffer und addiere anschließend die Einzelziffern. Ganz so, wie man das mit Zettel und Bleistift machen würde.

Mit Modulo-Rechnung geht es sicher auch, aber da muß man etwas länger überlegen.
 
Dann könnte es so gehen, den Code dann in die Schleife von oben einfügen.

// Quersumme einer Zahl, Zahl steht in Variable i
unsigned long q=0;

int j = i;
do {
q+=j%10;
j /=10;
} while (j)
 
Zuletzt bearbeitet:
Müsste aber eigentlich gehen. Initialisierst Du q vorher mit 0?
 
habs hinbekommen :)

wie genau kann ich morgen posten da es aufm Laptop ist und nicht auf meinem Desktop PC :)

vielen dank noch mal :)

Gruß
PREDATOR
 
Machts doch net so komplifiziert:

Code:
int i,j,qsum=0;

for(i=1;i<=n;i++) for(j=i;j!=0;j/=10) qsum+=j%10;

et voila
 
Zuletzt bearbeitet:
Die Lösung von i_hasser und ein paar Kommentare

Code:
#include "stdafx.h" // für Visual C++ unter Windows

int main(int argc, char* argv[])
{
	int start = 1; // Variable für die erste Zahl der zu berechnenden Quersumme
	int end = 32767; // Variable für die letzte Zahl der zu berechnenden Quersumme

	int i = start; // Hilfsvariable für die Schleifendurchläufe
	int tmp; // Temporäre Variable - Hilfsvariable

	int qsum = 0; // Variable für die Quersumme

	for(i;i<=end;i++)
	 for(tmp=i;tmp!=0;tmp/=10) qsum+=tmp%10;

	printf("Die Quersumme fuer den Zahlenbereich von %d bis %d betraegt = %d\n", start, end, qsum);
	return 0;
}
 
Die Lösung von i_hasser und ein paar Kommentare

Code:
#include "stdafx.h" // für Visual C++ unter Windows

int main(int argc, char* argv[])
{
	int start = 1; // Variable für die erste Zahl der zu berechnenden Quersumme
	int end = 32767; // Variable für die letzte Zahl der zu berechnenden Quersumme

	[color=red][b]int i = start;[/b][/color] // Hilfsvariable für die Schleifendurchläufe
	int tmp; // Temporäre Variable - Hilfsvariable

	int qsum = 0; // Variable für die Quersumme

	for([color=red][b]i[/b][/color];i<=end;i++)
	 for(tmp=i;tmp!=0;tmp/=10) qsum+=tmp%10;

	printf("Die Quersumme fuer den Zahlenbereich von %d bis %d betraegt = %d\n", start, end, qsum);
	return 0;
}

Das i allein tut da aber auch net viel ;).
 
Na weil du solange jeweils die letzte Ziffer von j abziehst, bis nur noch 0en dastehen. Das 2. for addiert die Quersumme von j auf qsum, das erste for macht das für alle Zahlen im Bereich 0..n
 
Also "j=i" würde ich verstehen, aber "j=n"? D.h das Programm berechnet 32767 mal die Quersumme von 32767. Richtig?
 
Das i allein tut da aber auch net viel ;).

Ich wollte die "start"-Variable nicht als Zähler verwenden, damit ich am Schluss den Bereich der berechneten Quersummen angeben kann.

Achja ... hab den Fehler gestern Abend schon ausgebessert, aber vergessen es anzumerken.
 
Zuletzt bearbeitet:
Na entweder heißt es "i=start; for(;i<=end;i++) [...];" oder "for(i=start;i<=end;i++) [...];"

Das i allein ist so sinnvoll wie irgendwo "i;" hinzuschreiben.
 
so,habe das ganze mit einer while schleife gelöst und anstatt alle quersummen von 0 bis int_max einfach ne Zahleneingabe gemacht.....

dann hat das ganze wunderbar geklappt :)

vielen dank euch noch mal :) hatte leider keine zeit früher zu antworten :( viele klausuren,protokolle usw. zur zeit :( ...... weiß im moment garnicht wie ich das alles fertig bekommen soll...... und am montag müssen wir auch schon das nächste programm mit protokoll abgeben :(

damit werde ich mich freitag mal auseinander setzen.

auf jeden fall weiß ich jetzt, wo ich fragen muss,falls ich probleme habe da, man hier schnelle und kompetente hilfe bekommt :)

vielen vielen dank noch mal an alle :)

Ihr seit echt klasse ;) (und das war jetzt kein geschleime sondern ernst gemeint!)

Gruß
PREDATOR
 
Zurück
Oben Unten