Ziffernfolge

keita063

Grünschnabel
Hallo,

ich müsste die größte Ziffernfolge bis 1000 berechnen.
Die Zahl 1 wird durch alle Zahlen bis 1000 dividiert.
Erklärung Ziffernfolge:
- 1/2 = 0,500
- 1/3 = 0,333333 Ziffernfolge 1
....
- 1/7 = 0,142857142857 Ziffernfolge 6
...

Mein Ansatz wäre: Die Zahl 1 durch alle Zahlen bis 1000 dividieren - mit einer For-Schleife. Ich hätte vor, das Ergebnis *1000 000 und anschließend mit modulo die Zahlen eins nach dem anderen überprüfen. Beispiel: - 1/7 = 0,142857142857 * 1000 000 = 142857,142857 die Zahl 142857 mit modulo 10 in einer Variable abspeichern und die dann mit der nachfolgenden Zahl vergleichen.

Das Problem hierbei ist, dass ich nicht weiß, was die Ziffernfolge der Zahl ist und somit auch nicht wissen kann, obs mal 1000 000 gemacht gehört oder doch mal 1000?

Wisst ihr einen einfacheren Weg bzw. könnt ihr mir einen Tipp geben, wie ich am besten die Ziffernfolgen der Zahlen herausfinden kann?

sG Keita
 
Lösung
Mein Ansatz wäre: Die Zahl 1 durch alle Zahlen bis 1000 dividieren - mit einer For-Schleife. Ich hätte vor, das Ergebnis *1000 000 und anschließend mit modulo die Zahlen eins nach dem anderen überprüfen.
Floating Point Rundungsfehler sind dir ein Begriff? Mit dieser Division wirst du keine (korrekten) Ziffernfolgen hinkriegen.

Wisst ihr einen einfacheren Weg bzw. könnt ihr mir einen Tipp geben, wie ich am besten die Ziffernfolgen der Zahlen herausfinden kann?
Naja, ganz manuell vielleicht:
Code:
a / b = x_1 * b + r_1
10 * r_1 / b = x_2 * b + r_2
10 * r_2 / b = x_3 * b + r_3
...

Ich will dir nicht zuviel Code vorwegnehmen. Aber das sollte eigentlich schon recht viel sein.
Entsprechend im Code für jede Iteration:
x = a...
Mein Ansatz wäre: Die Zahl 1 durch alle Zahlen bis 1000 dividieren - mit einer For-Schleife. Ich hätte vor, das Ergebnis *1000 000 und anschließend mit modulo die Zahlen eins nach dem anderen überprüfen.
Floating Point Rundungsfehler sind dir ein Begriff? Mit dieser Division wirst du keine (korrekten) Ziffernfolgen hinkriegen.

Wisst ihr einen einfacheren Weg bzw. könnt ihr mir einen Tipp geben, wie ich am besten die Ziffernfolgen der Zahlen herausfinden kann?
Naja, ganz manuell vielleicht:
Code:
a / b = x_1 * b + r_1
10 * r_1 / b = x_2 * b + r_2
10 * r_2 / b = x_3 * b + r_3
...

Ich will dir nicht zuviel Code vorwegnehmen. Aber das sollte eigentlich schon recht viel sein.
Entsprechend im Code für jede Iteration:
x = a / b
r = a % b

Die Schleife kann beendet werden, wenn r == 0 gilt (Ich würde einen Cutoff etwas früher setzen, z.B. bei 100000. Alles in dieser Grössenordnung ist eh fast unendlich(TM))

Gruss
cwriter
 
Lösung
ich müsste die größte Ziffernfolge bis 1000 berechnen.
Was ist denn die größte Ziffernfolge? Meinst du die längste Periode aller Einheitsbrüche?

Das kommt mir sehr bekannt vor: Problem 26 - Project Euler

Der naive Ansatz (und das reicht für d < 1000) ist es per Code schriftliche Division auszuführen.

https://de.wikipedia.org/wiki/Schriftliche_Division
Du behältst einfach eine Liste aller Reste, die bis jetzt vorgekommen sind. Und wenn der aktuelle Rest vorher schonmal aufgetreten ist, hast du einen Zyklus gefunden.

Ich hoffe du versuchst nicht zu betrügen...

Gruß Technipion
 
Danke für die Hilfestellung, habs endlich :) - @Technipion - die Lösung zur Aufgabe war bereits bekannt, aber nicht der Lösungsweg. Hätte ich betrügen wollen, würde ich die Lösung in ProjectEuler posten. Hatte ich aber nie vor. Danke und guten Rutsch :)
 
Zurück