166. 分數到小數
給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。
如果小數部分為迴圈小數,則將迴圈的部分括在括號內。
示例 1:
輸入: numerator = 1, denominator = 2
輸出: 「0.5」
示例 2:
輸入: numerator = 2, denominator = 1
輸出: 「2」
示例 3:
輸入: numerator = 2, denominator = 3
輸出: 「0.(6)」
class
solution
:def
fractiontodecimal
(self, numerator:
int, denominator:
int)
->
str:
if numerator ==0:
return
"0" out =
if(numerator >0)
^(denominator >0)
:#判斷正負
'-')
numerator, denominator =
abs(numerator)
,abs
(denominator)
#知道正負之後就可以變成正數計算
#接下來就是有小數系列
a, b =
divmod
(numerator, denominator)
str(a)
)if b ==0:
return
"".join(out)
'.')
loc =
#記錄餘數的位置,
while b:
b *=
10 a, b =
divmod
(b, denominator)
#餘數乘以10再除
str(a)
)if b in loc:
#之前有餘數的記錄,說明出現迴圈,注意這裡括號應該插入到之前的位置
out.insert(loc[b]
,'('
)#如果一開始就使用字串的話不能修改插入
')')
break
loc[b]
=len
(out)
return
"".join(out)
使用字串插入:
class
solution
:def
fractiontodecimal
(self, numerator:
int, denominator:
int)
->
str:
if numerator ==0:
return
"0" res =
""# 首先判斷結果正負, 異或作用就是 兩個數不同 為 true 即 1 ^ 0 = 1 或者 0 ^ 1 = 1
if(numerator >0)
^(denominator >0)
: res +=
"-" numerator, denominator =
abs(numerator)
,abs
(denominator)
# 判讀到底有沒有小數
a, b =
divmod
(numerator, denominator)
res +=
str(a)
# 無小數
if b ==0:
return res
res +=
"."# 處理餘數
# 把所有出現過的餘數記錄下來
loc =
while b:
b *=
10 a, b =
divmod
(b, denominator)
res +=
str(a)
# 餘數前面出現過,說明開始迴圈了,加括號
if b in loc:
res = res[
:loc[b]]+
'('+ res[loc[b]:]
# res.insert(loc[b], "(")
res +=
")"break
# 在把該位置的記錄下來
loc[b]
=len
(res)
return res
Leetcode 166 分數到小數
給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。示例 1 輸入 numerator 1,denominator 2輸出 0.5 示例 2 輸入 numerator 2,denominator ...
leetcode166 分數到小數
給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。示例 1 輸入 numerator 1,denominator 2 輸出 0.5 示例 2 輸入 numerator 2,denominator...
LeetCode 166 分數到小數
給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。示例 1 輸入 numerator 1,denominator 2輸出 0.5 示例 2 輸入 numerator 2,denominator ...