题目:
小数化分数2
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 801 Accepted Submission(s): 308
Problem Description
Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output
对每一个对应的小数化成最简分数后输出,占一行。
Sample Input
3
0.(4)
0.5
0.32(692307)
Sample Output
4/9
1/2
17/52
这个题目其实很简单,但是我还是花了很多时间在上面,真是比较惭愧,开始我用的是这个思想,但是代码提交老是wrong,我
也不知道是为什么,如果有兴趣可以看看。
http://hi.baidu.com/niren_cn/blog/item/d6b62516badadf47f919b8f9.html 错误代码(代码注释比较少,懒得写了):
后来问了队长,他认为0.4(38)=0.4+0.038+0.00038.....后面一大串是一个等比数列,可以用等比数列公式,我上网查了
等比数列无穷项求和为S∞=a1/(1-q) (n-> ∞)(|q|<1)(http://baike.baidu.com/view/1149632.htm),当时想
这个公式也没有简单多少,我就根据这个继续化简了下,题目是求0.s1s2s3...sn(y1y2y3..ym)的分数形式,我们把
s1s2s3...sn看做S1,把y1y2y3..ym看做S2,那么求和公式中的a1为S2/(10^n),q为1/(10^m),根据公式化简
得出了,这个公式其实网上也有,后来才看到的,所以就复制了他的公式,不过他的推导过程我没有看懂
附上地址(http://xuyemin520.is-programmer.com/posts/26183.html)
AC代码: