我正在使用 Python 的小数模块处理分数,我想只得到某个分数的重复部分。例如:如果我有 1/3,我想获得 3,如果我有 1/7,我想获得 142857。是否有任何标准函数可以做到这一点?
3 回答
由于给出答案可能是对项目 euler 的剧透(在 stackoverflow 上通常不会这样做),我想给出这个提示:阅读此内容(第 1.2 节应该敲响警钟)。
我知道这个问题是很久以前的问题了,但我认为人们可能仍在搜索这样的内容,所以我想我会提到一些事情要记住,因为我尝试编码并最终改变主意使用长除法和找到在除以后得到余数时发生重复的位置。实际上,我最初是在尝试使用 Ants Aasma 建议的方法。
我试图获得这样的输出 1/7,因为我的函数试图输出一个可以用作问题答案的字符串;“0.142857 142857……”
使用 Ants Aasma 提供的方法很容易找到诸如 1/7 之类的小数,但是当您尝试诸如 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 建议的方法,请记住几个提示。
找到 10**k - 1 形式的第一个数字,它恰好除以分数的分母,除以分母并乘以分子,就得到了重复部分。