比如某道题给出某个数值 a 为 0.5833,我想猜出来它是一个怎样的分数。
比较正经的方法是假设 a=0.583..3(无限循环)=0.58+0.01[x]0.3..3(无限循环)=29/50+1/100[x]1/3=7/12。
如果懒一点,假设转换出来的分数不存在大于 11 的倍数,则 2[x]3[x]5[x]7[x]11=2310,m=2310[x]0.5833=1347.42 。
当 m 取 1347,1347=3[x]449[x]1,1347 和 2310 的公约数为 3,化简后分数为 449/770。
当 m 取 1348,则化简后分数为 674/1155.
当 m 取 1347.4,并且让 2310 乘 10,则化简后分数,6737/11550.
现在的问题是,如果是用正经的方法,当对于从文本读取来的一堆有限位小数时,怎样才能想象出它的无限循环部分呢?或许可以通过限制分母的大小来要求重新走流程?
假设 a 是 0.58330330..=0.58(330,无限循环),那么 a 就变成 29/50+3/100[x](100/999+1/99)=4856/8325。
如果是用懒人的方法,请指教如何修改可以得到完美的"7/12".
谢谢各位。
#这语法自动把*号转 markdown 了。。
比较正经的方法是假设 a=0.583..3(无限循环)=0.58+0.01[x]0.3..3(无限循环)=29/50+1/100[x]1/3=7/12。
如果懒一点,假设转换出来的分数不存在大于 11 的倍数,则 2[x]3[x]5[x]7[x]11=2310,m=2310[x]0.5833=1347.42 。
当 m 取 1347,1347=3[x]449[x]1,1347 和 2310 的公约数为 3,化简后分数为 449/770。
当 m 取 1348,则化简后分数为 674/1155.
当 m 取 1347.4,并且让 2310 乘 10,则化简后分数,6737/11550.
现在的问题是,如果是用正经的方法,当对于从文本读取来的一堆有限位小数时,怎样才能想象出它的无限循环部分呢?或许可以通过限制分母的大小来要求重新走流程?
假设 a 是 0.58330330..=0.58(330,无限循环),那么 a 就变成 29/50+3/100[x](100/999+1/99)=4856/8325。
如果是用懒人的方法,请指教如何修改可以得到完美的"7/12".
谢谢各位。
#这语法自动把*号转 markdown 了。。