Leetcode题解--18_Fraction to Recurring Decimal

来源:互联网 发布:剑灵伪娘数据 编辑:程序博客网 时间:2024/06/05 15:19

Fraction to Recurring Decimal

耗费时间:一天半 

提交次数:>15

总结:思路上有问题,开始陷入了数论的死胡同。后期虽然思路正确,但是边界检查做得不够好。


题目描述:输入两个整数a,b ,给出他们的商a/b的循环小数形式。

  • Given numerator = 1, denominator = 2, return "0.5".
  • Given numerator = 2, denominator = 1, return "2".
  • Given numerator = 2, denominator = 3, return "0.(6)"
解题思路:

1.循环小数0.(17)是可以直接改写成分数的形式17/99。 如果能够找到某个分数a/b的分母b形如999...999的倍数,分子同时也扩大这么多倍,循环体就找到了。

上述思路最大的问题:分母的倍数不好存储,形如99...99的数字用long或者int存,超过20位都存不下。其次,分母b并不能直接找倍数,需要进行一定的处理,计算一定步数的除法,约去b中含有的因数2和5,得到新的分数A/B才能开始找99..99。

2.循环小数表面上是商重复,很容易掉入记录尾数,有限状态机或者字符串匹配的陷阱。实质上是余数的不同才导致了商的不同。通过记录所有出现的余数,利用hash表存储位置信息,就可以找到第一个重复的余数。


最后,以上思路都要注意边界检查。



0 0