4

重複の可能性:
分数の繰り返し小数を知るには?

1/3 は 3/10 違います。0.33333 != 0.3

したがって、1/3 は 0.3 になります (3 番目の上に線があります)

1/12 = 0.833333 = 0.083 (数値 3 の上の線)

1/13 = 0.076923076923 = 0.|076923|

それらの線は繰り返し部分を表します。

このモデルをクラスで使用する予定です。私はこの状況に少し迷っています。繰り返し値を決定するためのアイデアが必要です。ありがとう。

4

2 に答える 2

5

サイクル検出アルゴリズムがその答えです。Floyd の周期検出アルゴリズムまたはBrent の周期検出アルゴリズムを使用できます。

これらのアルゴリズムにプラグインする関数は、商の次の桁を生成する関数です。

于 2012-07-02T14:59:47.697 に答える
4

各ステップで、除算、フロア、余りを取り、それを 10 倍して、同じ数になるまで繰り返します。

たとえば、1/81 の場合:

1/81 = 0 with remainder 1       0
10/81 = 0 with remainder 10     0.0
100/81 = 1 with remainder 19    0.01
190/81 = 2 with remainder 28    0.012
280/81 = 3 with remainder 37    0.0123
...
10/81 = 0 with remainder 10; saw this already.
0.|012345679|

実装例は次のとおりです。

private static string GetRepeatingPart(int n, int d) {
    var seen = new HashSet<int>();
    var result = new StringBuilder();

    n = (n % d) * 10;

    while(true) {
        int p = n / d;
        n = (n % d) * 10;

        if(seen.Contains(n)) {
            return result.ToString();
        }

        result.Append(p);
        seen.Add(n);
    }
}
于 2012-07-02T14:59:38.273 に答える