gpt4 book ai didi

python - 在检查重复小数时实现长除法

转载 作者:行者123 更新时间:2023-12-03 19:10:01 25 4
gpt4 key购买 nike

我有一个函数,它接受一个整数 'num' 并返回 1/num 中的任何重复数字。为此,它利用了长除法中的一个技巧。如果您跟踪中间除法并看到同一个除法重复出现,您就会知道从第一次出现该除法到前一个除法的数字是小数中的重复数字。我知道这没有很好地解释,但这里有一个例子。
尝试运行以下代码。

def divide_with_repetition_check(num):
"""Determines 1 / num through long division one digit at a time. The function also checks for
repetition, and if there is any,
returns the repeating digits.

It would be better to separate the division functionality out into a generator, and then use
next() to yield each digit
and result combo to check for repetition in a separate function.

For now, this is how it will remain.

Args:
num (int): Denominator for divison

Returns:
string: Repeating digits converted to a string
"""
dividend = 1
zero_count = 0
intermediate_divisions = []
repeating_digits = ""

result = dividend // num

while dividend:
if (num, result) in intermediate_divisions:
index = intermediate_divisions.index((num, result))
for i in range(index, len(intermediate_divisions)):
repeating_digits += str(intermediate_divisions[i][1])
break
if result == 0:
zero_count += 1
intermediate_divisions.append((num, result))
dividend = (
dividend % num * 10
) # This is equivalent to "bringing down the zero" in long divison
result = dividend // num
return repeating_digits


num = 7
repeating_digits = divide_with_repetition_check(num)
print(repeating_digits)
出于本示例的目的,我将通过将重复数字放在括号中来显示重复小数。所以如果 1/3 = 0.3333333333333333..... 我会写 0.(3)。
将 num 设置为 7,脚本会打印“142857”,因为 1/7 = 0.(142857)。
如果将 num 设置为 2,则脚本不会打印任何内容,因为 1/2 = 0.5 不包含重复小数。
当您将 num 设置为 14. 1/14 = 0.0(714285) 时,问题就出现了。这里有一个前导零,脚本确定零是重复数字并打印“0”而不是它应该的“7142285”。
对于小数点前带零但没有重复的数字,也会出现同样的问题。例如,将 num 设置为 16。
任何帮助是极大的赞赏。

最佳答案

(dividend, result) 时,该模式重复对重复,而不是当 (num, result)对重复。所以这就是你应该存储的:

while dividend:
if (dividend, result) in intermediate_divisions:
index = intermediate_divisions.index((dividend, result))
for i in range(index, len(intermediate_divisions)):
repeating_digits += str(intermediate_divisions[i][1])
break
if result == 0:
zero_count += 1
intermediate_divisions.append((dividend, result))
dividend = (
dividend % num * 10
) # This is equivalent to "bringing down the zero" in long divison
result = dividend // num
此外,您可以通过以下方式返回它,使其更加 Pythonic:
if (dividend, result) in intermediate_divisions:
index = intermediate_divisions.index((dividend, result))
return ''.join((str(x[1]) for x in intermediate_divisions[index:]))
if result == 0:
zero_count += 1
...

关于python - 在检查重复小数时实现长除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62527047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com