Ich habe meinen Algorithmus jetzt auch mal kurz in JS implementiert und bin zu dem Ergebnis gekommen, dass meine Variante ungefähr doppelt so schnell ist, wie die Variante mit charAt.
Sehr interessant.
Der Unterschied kommt von Math.floor im gegensatz zu parseInt(), dadurch wird deine Funktion 2 mal so schnell.
Aber je länger die Zahl ist, umso schneller wird split und aber einer gewissen länger der Zahl fällt deine hinter charAt(), aber je kürzer umso schneller wird deine (ab ca. 25 Stellen)
Mich hat das aber eher gewundert, da du zwei Divisionen in der Schleife hast (Modulo ist eine, oder?) und Fließkommaarithmetik ja immer langsam ist.
Wenn man die Quersumme aber sowieso nur für ein Beispiel berechnet und nicht mehrere Tausend mal, dann spielt das alles keine Rolle und man kann sich für den schönsten Algorithmus, sprich den, der nicht mit Strings rumbastelt, entscheiden ;-)
Ich finde deinen Ansatz elegant, aber nicht schöner. Letzlich ist das aufsplitten der Zahl in die einzelnen Zahlen, ja das was man tut, wenn man die Quersumme berechnet. Unabhängig von dem Datentyp, der in JS auch gar nicht so eine grosse Rolle spielt.
Du rechnest ja die Quersumme ja nicht so aus:
Der Rest von 2345 / 10 ist gleich 5, geteilt durch 10 gleich 234
Der Rest von 234 / 10 ist gleich 4 plus 5 gleich 9 , geteilt durch 10 gleich 234
...
Sondern
2 + 3 + 4 + 5
Insofern finde ich meinen Ansatz am elegantesten ;-)
Struppi.