up, down 分别表示分数的分子和分母。请计算出这个分数对应的小数是多少?
如果小数部分是循环小数,则将循环的部分括在括号内。
如果存在多个答案,只需输出任意一个。
输入一行有两个数字,用空格隔开,分别表示分子和分母;
输出一行是对应的小数,用字符串类型输出。
测试用例:
输入:1 2 输出:0.5
输入:2 1 输出:2
输入:2 3 输出:0.(6)
输入:4 333 输出:0.(012)
输入:1 5 输出:0.2
输入:57 7 输出:8.(142857)
程序实现:
# 分数转小数
def caculat(up, down, dct, s):
n, m = divmod(up, down)
sn = str(n)
s += sn
dct[sn] = s.count(sn)
if len(s) > 1000:
print( '可能是无限不循环小数!')
return dct
if m == 0 or dct[sn] > 2:
return dct
else:
up = m * 10
return caculat(up, down, dct, s)
# 主程序
up, down = map(int, input().split())
ans = ''
while down == 0:
print('零不可以作分母!请重新输入:')
up, down = map(int, input().split())
if up * down < 0:
ans += '-'
n, m = divmod(up, down)
ans += str(n)
if m == 0:
print(ans)
else:
ans += '.'
dct = {}
s = ''
up = m * 10
dct = caculat(up, down, dct, s)
s = ''
mx = max(dct.values())
for k,v in dct.items():
s += k
if v == mx and mx > 1:
s = '(' + s
ans += s +')' if mx > 1 else s
print(ans)