python3 解决除法中循环小数计算并判断循环体
#解决分数变小数,小数位数受到计算机位数限制的问题。任意位小数除法2019.11.25
r = [] # 放结果
x = 0
#-------------计算过程-------------------------
def divcal(a,b,c): # 计算主函数 a/b 留c位小数
a1 = a
print(a1,b,c)
if a1 < b : #小于1,打印0.
a1 = a1 * 10
print(“0.”,end="")
else: #当分子大于分母部分,计算整数部分,余数进行小数部分运算
a2,a1 = divmod(a,b)
print(str(a2),end="")
print( ".", end="")
a1 = a1 * 10
while len(r) < c: #小数部分运算,一直算到指定到位数c
aplus(a1,b) #去判断是否小于除数,如果小于就加零
# print(x)
a2,a1 = divmod(x,b)
r.append(a2)
a1 = a1 * 10
#print(r)
for i in range(0,len(r)):
print(str(r[i]),end="")
print("")
#--------除法过程中递归方法找到能运算到数-----------
def aplus(a1,b): #迭代找到刚好大于除数到数字
global x #必须声明x是全局变量,否则结果回传不了
if a1 < b:
a1 = a1 * 10
r.append(0)
aplus(a1,b)
else:
x = a1
return
#---------找循环节--------------------------
def findxhj():
for i in range(0,int(len®/2)): #小数部分起点
for j in range(1,int(len®/2)): #循环节长度
str_1 = r[i:i+j]
str_2 = r[i+j:i+2*j]
if str_1 == str_2 :
print(“循环节:”, end="")
for i in range(0, len(str_1)):
print(str(str_1[i]), end="")
print("-----",len(str_1),“位”)
return
if name == ‘main’:
a = 9 # 被除数
b = 49 # 除数
c = 200 # 小数位数
divcal(a, b, c)
findxhj()