Algorithmus für die Erkennung von sich wiederholenden Nachkommastellen?

Gibt es einen Algorithmus, um herauszufinden, die folgenden Dinge?

  1. Wenn das Ergebnis einer division ist eine wiederholte decimal (Binär).
  2. Wenn es wiederholt, was bei Ziffer (dargestellt als eine Potenz von 2) ist die Wiederholung starten?
  3. Welche Ziffern wiederholen?

Einige Beispiele:

1/2 = 1/10 = 0.1 //1 = false, 2 = N/A, 3 = N/A, 4 = N/A
1/3 = 1/11 = 0.010101... //1 = true, 2 = -2, 3 = 10
2/3 = 10/11 = 0.101010... //1 = true, 2 = -1, 3 = 10
4/3 = 100/11 = 1.010101... //1 = true, 2 = 0, 3 = 10
1/5 = 1/101 = 0.001100110011... //1 = true, 2 = -3, 3 = 1100

Gibt es eine Möglichkeit, dies zu tun? Effizienz ist ein großes Anliegen. Eine Beschreibung des Algorithmus würde bevorzugt über code, aber was nehm ich Antwort die ich bekommen kann.

Es ist auch erwähnenswert, dass die Basis keine große Sache; ich konvertieren kann der Algorithmus über binäre (oder wenn es, sagen wir mal Basis 256 zu verwenden chars für Leichtigkeit, ich könnte einfach). Ich sage das, weil, wenn Sie erklären, wäre es einfacher für Sie, um zu erklären, in der Basis 10 :).

- Welche Bedingungen haben Sie benutzt, um das Ergebnis zu erhalten? Warum werden nicht die Ziffern, die wiederholt werden "01", "01", "10" und "0011"?
Meine Argumentation war, um 1 das erste, weil die führenden Nullen sind nicht [signifikanten][1], während nachgestellte Nullen sind. Wenn die Anzahl waren so etwas wie, "111.010101...", die sich wiederholenden Nummern "01", weil in diesem Fall die erste 0 ist signifikant. [1]:en.wikipedia.org/wiki/Significant_digits
Das ist nicht wichtig für mich, obwohl. Wenn Sie mir sagten, wie Sie dies tun in einer Weise, die zurückgegeben "01", "01", "01" und "0011" ich wäre glücklich. 🙂
Klingt wie projecteuler.net/problem=26 😉

InformationsquelleAutor Imagist | 2009-08-22

Schreibe einen Kommentar