求 a/b 的小数表现形式。如果 a 可以整除 b 则不需要小数点。如果是有限小数,则可以直接输出。如果是无限循环小数,则需要把小数循环的部分用"()"括起来。
数据范围:
, 
两个整数a和b,其中
0 <= a <= 1000 000
1 <= b <= 10 000
一个字符串,该分数的小数表现形式
10 1
10
10/1 = 10
1 2
0.5
1/2 = 0.5
1 3
0.(3)
1/3 = 0.333333...
1 6
0.1(6)
1/6 = 0.16666666....
1 7
0.(142857)
1 / 7 = 0.1428571428...
def solve(x,y):
k=x//y;
pre,back=str(k),"";
cycle={}
while x%y:
x=(x%y)*10;
if cycle.get(x)!=None:
i=cycle[x]
back=back[:i]+"("+back[i:]+")";
break;
else:
p=x//y;
back+=str(p);
cycle[x]=len(back)-1;
if back:
return pre+"."+back;
else:
return pre
x,y=list(map(int,input().split()))
print(solve(x,y)) import sys
a, b = map(int, sys.stdin.readline().strip().split())
if a % b == 0:
print(a // b)
else:
L1 = []
L2 = []
flag = False
while a % b != 0:
L1.append(str(a//b))
yushu = a%b
if yushu in L2:
index = L2.index(yushu)
flag = True
print(str(L1[0])+'.'+''.join(L1[1:index+1])+'('+''.join(L1[index+1:])+')')
break
else:
L2.append(yushu)
a = yushu*10
if flag == False:
L1.append(str(a//b))
print(str(L1[0])+'.'+''.join(L1[1:])) a, b = map(int, input().split())
int_num = a // b
left = a % b
ans_num = []
index_num = {}
i = 0
while left != 0 and left not in index_num:
index_num[left] = i
res_part = left * 10 // b
ans_num.append(res_part)
left = left * 10 % b
i += 1
if len(ans_num) == 0:
print(int_num)
elif left == 0:
print(str(int_num)+".", end="")
for mod_num in ans_num:
print(str(mod_num), end="")
print()
else:
print(str(int_num)+ ".", end="")
for j in range(index_num[left]):
print(str(ans_num[j]), end="")
print("(", end="")
k = index_num[left]
for num in ans_num[k:]:
print(str(num), end="")
print(")") 我TM服了 本地输出的明明是正确结果,牛客网给我输出完括号位置就变了,真的无语,咋回事啊大家谁看看哪错了,用例101 9997
a,b = map(int,input().strip().split())
quot = a//b
mod = a%b
decimal = []
remains = {}
recur_len = 0
while True:
# 如果当前余数已经出现过,循环节长度为
# 上次出现当前余数的位置一直到当前余数的前一个位置
if remains.get(mod,False):
for i in range(len(remains)):
if list(remains.keys())[i] == mod:
recur_len = len(list(remains.keys())[i:])
break
break
# 否则将当前余数添加至字典
else:
remains[mod] = True
mod*=10
# 记录最后一位小数,如果能除尽,跳出
decimal.append(str(mod//b))
if mod%b == 0:
break
mod %= b
# print(decimal,recur_len,remains)
if len(decimal)!=0 and not (decimal[0] == '0' and len(decimal)==1):
if recur_len!=0:
res = str(quot)+'.'+str(''.join(decimal[:-recur_len]))+'('+str(''.join(decimal[-recur_len:])+')')
else:
res = str(quot)+'.'+str(''.join(decimal))
else:
res = str(quot)
print(res)