计算重复小数的周期长度

问题描述 投票:0回答:1

我想在python(3.6.5)中做一个程序来告诉例如1/7。对于这个例子,输出应该是这样的:“长度:6,重复数字:142857”。我到目前为止得到了这个:

n = int(input("numerator: "))
d = int(input("denominator: "))

def t(n, d):
    x = n * 9
    z = x
    k = 1
    while z % d:
        z = z * 10 + x
        k += 1
        print ("length:", k)
        print ("repeated numbers:", t)

    return k, z / d

t(n, d)
python python-3.6 fractions recurring
1个回答
2
投票

print ("repeated numbers:", t)打印t函数本身的表示,而不是它的输出。

这是修复后的代码版本。我使用Python 3.6+ f-string将重复数字转换为字符串,并在前面添加零以使其成为正确的长度。

def find_period(n, d):
    z = x = n * 9
    k = 1
    while z % d:
        z = z * 10 + x
        k += 1

    digits = f"{z // d:0{k}}"
    return k, digits

# Test

num, den = 1, 7
period, digits = find_period(num, den)
print('num:', num, 'den:', den, 'period:', period, 'digits:', digits)

num, den = 1, 17
period, digits = find_period(num, den)
print('num:', num, 'den:', den, 'period:', period, 'digits:', digits)

产量

num: 1 den: 7 period: 6 digits: 142857
num: 1 den: 17 period: 16 digits: 0588235294117647

这条线可能有点神秘:

f"{z // d:0{k}}"

它说:找到小于或等于z除以d的最大整数,将其转换为字符串,并在左边用零填充(如果需要),使其长度为k


正如Goyo在评论中指出的那样,这种算法并不完美。如果小数包含任何非重复部分,也就是说,如果分母具有2或5的任何因子,它会陷入循环。看看你是否能找到解决这个问题的方法。

© www.soinside.com 2019 - 2024. All rights reserved.