您的位置:首页 > 其它

Leetcode题解--18_Fraction to Recurring Decimal

2014-12-21 13:59 232 查看
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表存储位置信息,就可以找到第一个重复的余数。

最后,以上思路都要注意边界检查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: