我想在java中找到22/7到10 ^ 6位小数的值。是否可以在短的编译时间内完成这项工作?
答案 0 :(得分:1)
拿笔和纸并尝试分割22/7。它看起来像这样
03,142857142857
---
22:7
0
--
22
21
--- < now we calculate fractal part so we will add zeros at the end
10 # 10 contains 7 only one time -> 1
7
---
30 # 30 contains 7 four times -> 4
28
---
20 ->2
14
---
60 ->8
56
---
40 ->5
35
---
50 ->7
49
---
10 # but wee already calculated this state of fractal part
# so from now on it will repeat again and again and again...
# giving ...142857|142857|142857...
所以22/7 = 3,(142857)
。知道周期部分从分形部分的第一个位置开始,并且它包含六个数字,我们可以计算10th
数字是8
(周期部分的第四个数字),20th
位置是{{ 1}}(周期性部分的第二个数字)。很容易注意到,如果周期部分从第一个位置开始,那么第n个数字将是(n)mod(周期中的位数),因此4
和周期部分中的第四个数字是10 % 6 = 4
, 8
和周期性部分中的第二个数字是20 % 6 = 2
。
所以你可能可以实现你自己的缓存算法(比如在一些地图中记住放置的键 - >值对的顺序)并尝试计算分形部分直到
4
数字,而不会找到周期性部分(22/7的第二位数字可以在找到期间之前返回)其他信息。由于n-th
为minimal value of X%Y
(因此我们将停止分割)且0
为max value of X%Y
,所以期间不能超过您之前划分的数字,因此只有数字在1和Y-1之间可以使用周期性部分,因此其最大长度为Y-1