also entweder ich steh jetzt gewaltig auf dem Schlauch oder es gibt zwei triviale Lösungen für das Problem:
Brute Force Approach:
Du erzeugst einfach irgendwelche Zufallszahlen, berechnest die Quersumme und schmeißt die Zahl einfach weg, wenn sie nicht passt. Das ist zwar völlig inperformant (brute force eben), aber wenn’s darauf nicht ankommt die schnellste Lösung.
gerichtete Suche:
Du generierst eine Zufallszahl, bildest deren Quersumme und modifizierst dann soviele einzelne Ziffern rauf oder runter, bis die Quersumme passt, wobei Stellen mit Null nicht erniedrigt werden dürfen. Beispiel:
Gesuchte Quersumme = 8, dreistellige Zahl. Erste generierte Zahl 125. Quersumme = 7. Zufällig eine Stelle auswählen => 1. Stelle; also 225 => Quersumme 8. Fertig.
Bestimmt gibt es auch eine mathematisch wahnsinnig elegante Lösung, aber nicht von mir um diese Uhrzeit.
Das ist ein Widerspruch in sich. Es gibt keine Zufallsahlen, die alle die gleiche iterierte Quersumme haben. Denn dann sind sie ja nicht mehr zufällig. Die von dir gewünschten Zufallszahlen würden zahlreiche statistische Tests nicht bestehen und wären daher für ernsthafte Computersimulationen unbrauchbar.
Wenn du jedoch einfach nur ein paar Zahlen generiert haben möchtest, ohne Anspruch, diese in Simulationen ernsthaft zu verwenden, bietet sich folgende eine einfache Möglichkeit zur Generierung an.
Generiere mit einem Zufallszahlengenerator 8-stellige Zufallszahlen.
Dann addierst du so lange zu der Zahl eine 1, bis die gewünschte iterierte Quersumme heraus kommt. (kann man auch schneller berechnen)
Zu einer beliebigen natürlichen Zahl n hat die Zahl n - (n mod 9) + q die iterierte Quersumme q (aus 1 bis 9).
Zum Beispiel: n = 2398472341 (aus Zufallsgenerator), n mod 9 = 7; also hat n - 7 die iterierte Quersumme 9. Wenn du jetzt z.B. gerne die Quersumme 5 hättest, addierst du wieder 5: n - 7 + 5 = n - 2 = 2398472339. Probe: 2+3+9+8+4+7+2+3+3+9 = 50, 5+0 = 5.
ich erwähne 'mal einen anderen Aspekt als die Vorredner: die Quersumme setzt das Dezimalsystem voraus, man wird also nicht umhin kommen, entweder nach dezimal oder BCD umzukodieren. (Letzteres hätte nur dann Vorteile, wenn du wirklich viele Zahlen in dem Format speichern willst.)
Weil Basiskonvertierung ein ganz klassisches Thema ist, findet man eine Lösung in (fast) jedem Assemblerbuch.