我正在使用Python的十进制模块处理分数,我想得到某个分数的重复部分。例如:如果我有1/3,我想得到3,如果我有1/7,我想得到142857.有没有任何标准功能可以做到这一点?
答案 0 :(得分:11)
由于给出答案可能是项目euler的扰流器(这通常不会在stackoverflow处完成),我想提供这个提示:阅读this(第1.2节应响铃)。< / p>
答案 1 :(得分:1)
我知道这个问题是很久以前的事了,但我认为人们可能仍然会搜索这样的东西,所以我想我在做这些事情时要记住一些事情,因为我尝试编码并最终改变主意使用长分并找到重复发生的地方,当你在分成后得到一个余数。我实际上最初试图使用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建议的方法,请记住几个提示。
答案 2 :(得分:0)
找到形式10 ** k - 1的第一个数字,它精确地除以分数的分母,除以分母并乘以分子,然后得到你的重复部分。
答案 3 :(得分:0)
在做类似的事情并寻找答案时,我发现了这个问题并找到了解决方案:)))
所以我想在这里发布我的解决方案:)
虽然可能很快,哈哈
def repeating_decimal(decimal):
repeat_str = str(decimal)[str(decimal).find('.') + 1:-1]
dec_list = list(repeat_str)[::-1]
dec_set = set(repeat_str)
for i in dec_set:
while dec_list.count(i) > 1:
dec_list.remove(i)
return ''.join(dec_list[::-1])