题面描述
小明每天都有很多作业要写,今天的作业内容是将一些分数写成小数的形式。
众所周知,有些分数可以写成有限小数,比如 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'))