小明的作业:小明每天都有很多作业要写,今天的作业内容是将一些分数写成小数的形式。众所周知,有些分数可以写成有限小数,比如 1 / 2 = 0.5...

题面描述

小明每天都有很多作业要写,今天的作业内容是将一些分数写成小数的形式。
众所周知,有些分数可以写成有限小数,比如 1 / 2 = 0.5 ,而有些分数会写成无限循环小数的形式,比如 1 / 3 = 0.33333 ……,小明觉得这个作业太麻烦了,于是请你来编程帮他完成这个作业。

输入数据

输入数据的第一行为一个正整数 T ,表示测试数据的组数。接下来有 T 行测试数据,每行测试数据为空格分隔的两个正整数 a, b ,代表分数 a / b( 1 ≤ T ≤ 20, 0 ≤ a ≤ b) 。

输出数据

对于每一组输入数据,输出一行结果。先输出” Case #id: ”,表示第 id 组数据, id 从 1 开始。如果该组数据能够写成有限小数,则在同一行中输出“ heiheihei ”,否则输出到该无限循环小数的第一个循环节结束。保证数据中所有无限小数均是 0.abcabc ……这样的形式,不会有形如 0.abcbc ……的小数,且循环节长度不超过 9 。

样例输入

4
1 2
1 3
1 4
2 3

样例输出

Case 1: heiheihei
Case 2: 0.3
Case 3: heiheihei
Case 4: 0.6

心得:我电脑的无限小数是16位(大于题目的9位),所以想当然通过找这16位中两段相同的串来判断。这可能存在2中问题:
1.16位只能判断到前8位和后8位是否重复,而题目是最大9位(这个可以通过8位不同直接显示9位解决)
2.其他机器可能不是16位小数!
3.用余数判断循环更科学,因为余数相同后边一定循环

T = int(input())      
for t in range(T):        
    a,b = list(map(int, input().split()))      
    container = []      
    result = str(int(a/b))+'.'      
    isFind = False      
    for i in range(9):          
        temp=a*10%b          
        if temp == 0:              
            break          
        else:              
            if temp in container:                  
                isFind = True                  
                break              
            else:                  
                result+=str(int(a*10/b))                  
                a = temp                  
                container.append(temp)      
    if isFind:            
        print('Case #{}: {}'.format(t+1,result))      
    else:             
        print('Case #{}: {}'.format(t+1,'heiheihei'))  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值