Quersumme
Weil's so grad schön war. Diesmal eine Funktion, um die Quersumme einer Zahl zu ermitteln:
javascript
Number.prototype.quersumme = function(forceOneDigit) { |
var z = this.toString().split(''); |
for (var i=0, quer=0; i < z.length; quer+=z[i++]-0); |
if( forceOneDigit && quer > 9) return quer.quersumme(forceOneDigit); |
return quer; |
} |
Beispiel
Nachtrag
Und wieder mal gab es zum Thema einen Thread im selfhtml Forum, wo donp eine sehr effektive und schnelle Lösung präsentierte.
Das sieht dann so aus:
javascript
Number.prototype.quersumme = function() { |
return this < 10 ? this : this % 9; |
} |
Comments (6)
10786 mal gelesen.
10786 mal gelesen.


6 Kommentare Einen Kommentar hinterlassen »
Kommentare
Donnerstag 30.November 2006: 20:59
Hallo Struppi,
schön wäre eine optionale Rekursion... wenn die zwischensumme nicht einstellig ist, kann man schließlich eine neue Quersumme bilden:
U.U. könnte das so aussehen:
Number.prototype.quersumme = function(forceOneDigit)
{
var z = this.toString().split('');
for (var i=0, quer=0; i 1)
? Number(quer).quersumme(forceOneDigit)
: quer;
return quer;
}
Donnerstag 30.November 2006: 21:12
Joh, hatte ich auch schon:
ich würd's allerdings so schreiben:
Number.prototype.quersumme = function(forceOneDigit)
{
var z = this.toString().split('');
for (var i=0, quer=0; i < z.length; quer+=z[i++]-0);
if( forceOneDigit && quer > 9) return quer.quersumme();
return quer;
}
Donnerstag 30.November 2006: 21:02
// Dein Skript hat meine spitzen Klammern gefressen...
Number.prototype.quersumme = function(forceOneDigit)
{
var z = this.toString().split('');
for (var i=0, quer=0; i < z.length; quer+=z[i++]-0);
quer = (forceOneDigit && quer.toString().length > 1)
? Number(quer).quersumme(forceOneDigit)
: quer;
return quer;
}
Donnerstag 28.Dezember 2006: 12:00
Das würde ja genau zwei Aufrufe erlauben, oder? Sollte man nicht noch den parameter forceOneDigt mit übergeben?
if( forceOneDigit && quer > 9) return quer.quersumme(forceOneDigit);
... allerdings wird das bei sehr großen Zahlen echt lahm, also eher wohl nicht in die Funktion mit hineinbauen.
Grüße,
fester_franz
Sonntag 9.November 2008: 22:50
hallo,
weil man im web2.0 nie zu spät dran ist und ich gerade hierrüber gestolpert bin:
Number.prototype.quersumme = function() {
return this < 10 ? this : this % 9;
}
gibt für alle vielfachen von 9 0 als quersumme zurück. ausserdem gibt die funktion für den fall x<10 eine Number zurück, für alle anderen eine integer.
so:
Number.prototype.quersumme = function() {
return this < 10 ? this : new Number((this % 9) || 9);
}
gibts immer die quersumme als Number.
gruß,
pD
Dienstag 12.Mai 2009: 19:34
Hallo,
Schön, dass man hier meine Quersummenfunktion findet, wusste ich bis jetzt gar nicht.
Es ist aber nicht die beste Version.
Ursprünglich ging sie einfach so (für's Dezimalsystem):
function qs(n) {return n%9||9}
Das funktioniert.
Wenn man immer ein Primitive zurückgeben will, einfach
+(n%9||9)
notieren, oder wenn man immer ein Objekt haben will, einfach
Number(n%9||9)
zurückgeben.
Gruß, donp
Einen Kommentar hinterlassen