URL: https://www.overclockers.at/coding-stuff/ziffernsumme_rein_mathematisch_als_summe_127817/page_1 - zur Vollversion wechseln!
Ich stehe vor einem eigentlich recht trivialen Problem, aber will wohl einfach die Lösung dafür einfach nicht sehen...
Im Grunde geht es mir darum, von einer ganzen Dezimalzahl beliebiger Länge die Ziffernsumme mit rein mathematischen Mitteln, also ohne Substringadressierung, zu berechnen. Mein Ansatz für eine z. B. 4-stellige Zahl der Form abcd ist im Moment wie folgt...
Um die jeweils letzte Stelle einer Zahl dieser Form zu berechnen, überprüfe ich einfach, in welche Restklasse modulo 10 die Zahl fällt, ergo:
x = abcd(mod 10)
Um jetzt die letzte Stelle von abcd "abzustreifen", subtrahiere ich x von abcd, was (weil abcd ja auch als z. B. e*10^3+f*10^2+g*10^1+x*10^0 dargestellt werden könnte) abc0 ergibt (0 ist dabei "wörtlich" zu nehmen, nicht als Faktor einer Multiplikation ;>. Dieses Zwischenergebnis durch 10 dividiert ergibt abc, oder aber e*10^2+f*10^1+g*10^0 - und alles was zu tun ist, ist, diese Zahl wieder in meine "Funktion" einzusetzen.
Nur scheitere ich im Moment einfach an der Überführung des Problems von deutscher in mathematische Semantik, sprich: Ich weiß nicht, wie ich den Schmorrn als Summe anschreiben soll...
Wäre dankbar, wenn mir wer den entscheidenden Wink geben könnte... ach, übrigens:
auslachen verboten
Tia,
- colo
Mit einer Rekursion sollte das kein Problem sein (sag ich mal so ).
Du musst es nur schaffen, den wiederkehrenden Teil mathematisch aufzuschreiben (Mod 10; Rest abziehn; Division durch 10), der Rest kommt dann von selbst.
x / 1000
x / 100
x / 10
Und jeweils mit dem Rest füttern und addieren ...
1234
1, 234 Rest
2, 34 Rest
3, 4 Rest
...
floor(4001/1000) -> 4
floor(4001/100) -> 40-10*4-> 0
floor(4001/10) -> 400-10*40-> 0
floor(4001/1) -> 4001-10*400-> 1
4+0+0+1
formelmässig:
siehe http://www.overclockers.at/showthre...277#post1665277 - die formel von hier hatte keinen wirklichen wert, durch mehrmaliges verschreiben
edit: partially owned by haba aber ich hab nur länger braucht weil ichs auch beschrieben hab
Funktioniert IMHO nicht => kann ja immer noch eine stelle größer sein, und Abfrageschleifen würden endlos laufen ...
=> Maximalanzahl einführen und dann von LS nach MS auf "0" bei Division überprüfen, wenn gefunden jeweils Iteration in "s" speichern ...
Hmm, muss das für n-Stellen gelten?
Wenn du mehr als 4 Stellen hast dann funktioniert das wieder nicht.
stimmt, hab mich nochmal verschrieben... darnZitat von HaBaFunktioniert IMHO nicht => kann ja immer noch eine stelle größer sein, und Abfrageschleifen würden endlos laufen ...
=> Maximalanzahl einführen und dann von LS nach MS auf "0" bei Division überprüfen, wenn gefunden jeweils Iteration in "s" speichern ...
n=unendlich ist nie falsch
Sonst halt irgendwas mit log10
n(x)=floor(log(x))+1 #log = zur basis 10...
so, n(x) sollte theoretisch funktionieren... und auch oben einsetzbar sein...
ok, mit rest isses vielleicht einfacher... hab mir folgendes überlegt
f(x|x>0,xeN)=f(x%(10^n(x)))
programmtechnisch musst selber umsetzen
@ringding... keine ahnung was deine aussage zu bedeuten hat, aber wenn n=1 wahr ist, so ist die frage n==inf. FALSCH - somit stimmt sie nichtmal...
Ich habe mit n die Anzahl der Schleifendurchläufe gemeint. Das kannst du auch beliebig oft wiederholen, es werden halt lauter 0 rauskommen.
ähm leute, hab ich mir bei colossus seiner beschreibung das hirn verrenkt oder wollt ihr die quersumme einer integer-zahl berechnen?
probierts mal damit:
Code:int z=0815-4711; //deine zahl int q=0; //wird dann die quersumme while(z!=0){ q+= z%10; z/=10; }
du hast ganz recht, nur es ging darin deinen c/java/etc. code mit hilfe der mathematik darzustellen.
der mathematische ausdruck is nunmal quersumme.
fragt mich aber nicht obs dafür auch ein symbol gibt.
noch nie was von grundlagenmathematik gehört?Zitat von smashItder mathematische ausdruck is nunmal quersumme.
fragt mich aber nicht obs dafür auch ein symbol gibt.
hab mal bischen auf wikipedia gesucht und eigentlich nur rausgefunden das man modulo auch in der mathematik als MOD schreibt.
dann sollte das ganze mathematisch so aussehn:
is allerdings ohne garantie auf richtigkeit.
@watchout:
hier das komplette prog:
verwendet i/o-classen die nicht ganz so umständlich sind wie die java-eigenen.Code:class Quersumme{ public static void main(String[] arg){ Out.print("bitte ganze zahl eingeben: "); int z=In.readInt(); int q=0; while(z!=0){ q+=z%10; z/=10; } Out.println("die quersumme betr„gt: "+ q); } }
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025