如何计算除法的无限值?

时间:2012-07-02 14:54:49

标签: c# algorithm oop

  

可能重复:
  How to know the repeating decimal in a fraction?

1/3与3/10不同。 0.33333!= 0.3

所以1/3将为0.3(第三行以上)

1/12 = 0.833333 = 0.083(第三行以上)

1/13 = 0.076923076923 = 0. | 076923 |

这些线代表重复部分。

我计划在课堂上使用这个模型。我对这种情况有点失落。我只需要一些想法来确定重复值。感谢。

2 个答案:

答案 0 :(得分:5)

Cycle detection algorithm就是答案。您可以使用Floyd's cycle detection algorithmBrent's cycle detection algorithm

插入这些算法的功能是产生商的下一个数字的功能。

答案 1 :(得分:4)

在每一步,划分,下限,取余数,乘以十,重复直到得到相同的数字。

例如,对于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);
    }
}