分数转小数

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)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值