在阅读了维基百科页面上重复小数的信息后,我找到了一种方法来查找小数重复部分的位数。
例如,
1/3 = 0.333333333333333333333333333333...所以结果是1位数。
1/7 = 0.142857142857142857142857142857... 所以结果是 6 位数。
但是,我的方法(在 Java 中)不适用于 1/6,它应该产生 1,因为:
1/6 = 0.1666...所以结果是 1 位,尽管小数部分不重复。
我找到了一个可行的解决方案(归功于 Nayuki Minase)。
private static int getCycleLength(int n)
{
Map<Integer,Integer> stateToIter = new HashMap<Integer,Integer>();
int state = 1;
int iter = 0;
while (!stateToIter.containsKey(state))
{
stateToIter.put(state, iter);
state = state * 10 % n;
iter++;
}
System.out.println(iter + " - " + stateToIter.get(state));
return iter - stateToIter.get(state);
}
有人可以向我解释一下这个算法是如何工作的吗?谢谢你。