有没有办法在Python中获取分数的循环小数部分?
我正在使用Python的decimal模块处理分数,我想要获取某个分数的循环部分。比如说,如果我有1/3,我想得到3;如果我有1/7,我想得到142857。有没有什么标准的函数可以做到这一点?
3 个回答
2
找到一个形如 10 的 k 次方减去 1 的第一个数字,这个数字能够被分数的分母整除。然后把这个数字除以分母,再乘以分子,你就能得到循环小数的部分。
3
我知道这个问题提得有点久了,但我觉得还是有很多人会搜索类似的内容,所以我想提几点在做这个时需要注意的事情。因为我尝试过编程,最后决定用长除法的方法,找出在除法中余数出现重复的地方。其实我最开始是想用Ants Aasma建议的方法。
我想要得到像1/7这样的输出,因为我的函数是想输出一个可以作为问题答案的字符串;比如说“0.142857 142857...”这样的格式。
像1/7这样的分数,用Ants Aasma提供的方法很容易就能找到小数部分,但如果你尝试像1/35这样的分数,就会变得麻烦,因为它不能被一个全是9的数字整除。首先,任何分母都需要把10的因子去掉,也就是说,要把所有的5和2都除掉,把像1/35这样的分数转换成0.2/7。
对于像1/70这样的分数,我认为最好的方法是先找到1/7,然后在小数点后面加一个0。对于1/35,你可以把它转换成0.2/7,然后再变成2/7,中间加一个0,放在重复部分和小数点之间。
如果使用Ants Aasma建议的方法,这里有几个小提示可以记住。
16
因为直接给出答案可能会剧透项目Euler(在StackOverflow上通常不这样做),所以我想给你一个提示:去看看这个链接(1.2节应该会让你想起一些东西)。