求 a/b 的小数表现形式。如果 a 可以整除 b 则不需要小数点。如果是有限小数,则可以直接输出。如果是无限循环小数,则需要把小数循环的部分用"()"括起来。
数据范围:
, ![](https://www.nowcoder.com/equation?tex=1%20%5Cle%20b%20%5Cle%2010000%20%5C)
两个整数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)