Wie kann ich in JavaScript die Quersumme berechnen?
Ich habe den Code aus meinem Java-Rechner genommen und ein wenig für JS abgeändert, da ich die Rechnung auf meiner Webseite brauchte. Nun erscheint jedoch bei 33 das Ergebnis 6.666666666666668.
Code (Text wurde aus alert entfernt):
else if (F == "Cross Sum") {
var resn = 0;
var ret = x;
while (true) {
if (x == 0) {
break;
}
resn += x % 10;
x /= 10;
}
alert(resn);
}
5 Antworten
Die ist schon klar, wozu "while" dient?
while (true) {
if (x == 0) {
break;
}
muss lauten:
while (x!=0){
Dass Du nach dem Teilen die Bruchteile abschneiden musst, weißt Du ja bereits.
Übrigens ist in den meisten Fällen ein "for" ebenso gut geeignet:
for (zahl=x; zahl > 0; zahl = Math.trunc(zahl/10))
{
resn += zahl % 10;
}
DieDivision ist keine Ganzzahldivision, von daher ist das Ergebnis nicht verwunderlich.
residue=x%10
resn+=residue
x=(x-residue)/10
Wäre eine Möglichkeit dem Problem zu begegnen. Eine andere wäre nach der Division die Nachkommastellen abzuschneiden (Math.trunc).
Wie meinen?
Beispiel 737
residue=7 (hinterste Stelle)
7 wird zu resn (quersumme, wieso eigentlich resn?) addiert
x=(737-7)/10 -> ergibt 73
Letzteren der beiden Vorschläge. "resn" habe ich gewählt, da res bereits in Verwendung war.
Achso, ja, nein, das truncate muß natürlich immer sofort nach der Division ausgeführt werden, also in jedem Schleifenzyklus - nur dann kann es klappen.
Du solltest idealerweise auch noch prüfen, daß die übergebene Zahl wirdklich ein Int ist, bevor Du mit der Arbeit loslegst.
du musst die eingaben in einer schleife über eine variable addieren und eine 2. variable fungiert als zähler, bei jeder schleife erhöhst du den Zähler um eins. dann dividierst du var1 durch var2
mit ES6
let querSumme = zahlen => String(zahlen).split("").map(Number).reduce(plus,0);
let plus = (a,b) => a+b;
console.log(querSumme(1234)); //10
Verarbeite es als String:
<script>
z = prompt("Zahl").toString();
quersumme = 0;
for(i = 1; i < z.length; i++) {
quersumme += parseInt(z.substr(i,1));
}
alert(quersumme)
</script>
Alex
Danke. Jedoch besteht das Problem bei einigen Zahlen auch dann noch, da sie mehr als "1" zu groß sind... (letztere)