给定一个有限小数或无限循环小数,你能否以分母最小的分数形式来返回这个小数呢?如果输入为循环小数,循环节用括号标记出来。下面是一些可能的输入数据,如0.3、0.30、0.3(000)、0.3333(3333)、。。。
解法:
从最简单的情况入手,因为所有的小数都可以分解成一个整数和一个纯小数之和,不妨只考虑大于0、小于1的纯小数,且暂时不考虑分子和分母的约分。
对于有限小数X = 0.a1a2a3….an,X就等于(a1a2a3…an)/10^n
对于无限循环小数X = 0.a1a2a3…an(b1b2…bm)来说,做如下转换
X = 0.a1a2…an(b1b2…bm)
-> 10^n* X = a1a2…an.(b1b2…bm)
-> X = (a1a2..an + 0.(b1b2..bm))/10^n
令Y = 0.(b1b2…bm)
10^m * Y = b1b2…bm.(b1b2..bm)
-> 10^m * Y - Y = b1b2…bm
-> Y = b1b2…bm/(10^m - 1)
代入Y进X
X = (a1a2…an + Y) / 10^n
= ((a1a2…an)(10^m-1) + (b1b2…bm))/((10^m-1)\10^n)
至此便得到任意一个小数的分数表示,但是此时分母未必是最简的,应对分子分母约分,就是求分子分母的最大公约数。再约分