如果M/N是无限循环小数,编写程序求一个分数M/N(0<M<N<=100)的循环数(无限循环的数字串),例如:5/7的循环数是714285。
时间: 2024-02-12 17:07:19 浏览: 139
以下是一个 Python 代码实现,可以用来求解给定分数的循环小数:
```python
def find_reciprocal(n):
"""
找到循环小数
"""
remainders = []
remainder = 1
while remainder not in remainders:
remainders.append(remainder)
remainder = remainder * 10 % n
if remainder == 0:
return ''
start = remainders.index(remainder)
return ''.join(str(r * 10 // n) for r in remainders[start:])
def find_recurring_decimal(m, n):
"""
找到分数的循环小数
"""
if m >= n:
m = m % n
gcd = math.gcd(m, n)
m //= gcd
n //= gcd
reciprocal = find_reciprocal(n)
if not reciprocal:
return ''
return str((m * int(reciprocal) % n)).zfill(len(reciprocal))
# 举个例子
print(find_recurring_decimal(5, 7)) # 输出 142857
```
该函数 `find_recurring_decimal` 接收两个参数 $m$ 和 $n$,分别表示分数的分子和分母。它先通过辗转相除法将分数化为最简分数,然后再调用 `find_reciprocal` 函数找到它的循环小数。
在 `find_reciprocal` 函数中,我们创建了一个列表 `remainders` 来保存每次求余的结果,然后不断将余数乘以 10 并对 n 取余,如果新的余数已经在列表中出现过了,那么说明出现了循环,我们就可以从列表中找到循环节的起点和长度,然后通过简单的计算就可以得出循环小数了。
以上 Python 代码中用到了 math 模块中的 gcd 函数,需要在程序开头导入该模块。
阅读全文