Cycles
Reciprocal

求分数的循环节

缓存一个历史余数列表,当发现当前的余数在之前的计算中出现过,那么就是第二个循环的开始。之前出现的余数的位置开始到当前的位置之前的部分就是循环节。

def recurring_cycle(x)
  r = 1
  m = {}
  a = ""
  while not m.include? r
    m[r] = a.length
    r *= 10
    a += (r / x).to_s
    r %= x
  end
  a[m[r]...a.length]
end