日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

int 小数_[LeetCode] 166. 分数到小数

發(fā)布時間:2023/12/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 int 小数_[LeetCode] 166. 分数到小数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述 : https://leetcode-cn.com/problems/fraction-to-recurring-decimal/

題目描述:

給定兩個整數(shù),分別表示分數(shù)的分子 numerator 和分母 denominator,以字符串形式返回小數(shù)。

如果小數(shù)部分為循環(huán)小數(shù),則將循環(huán)的部分括在括號內(nèi)。

示例:

示例 1:

輸入: numerator = 1, denominator = 2 輸出: "0.5"

示例 2:

輸入: numerator = 2, denominator = 1 輸出: "2"

示例 3:

輸入: numerator = 2, denominator = 3 輸出: "0.(6)"

思路:

這種題有幾種情況

  • 正負號問題
  • 加小數(shù)點的情況, 比如8/ 2 不需要加小數(shù)點
  • 小數(shù)部分,如何判斷是否開始循環(huán)了
  • 解決方法,

  • 先判斷結果的正負
  • 直接相除, 通過余數(shù),看能否整除
  • 開始循環(huán)的時候, 說明之前已經(jīng)出現(xiàn)過這個余數(shù), 我們只要記錄前面出現(xiàn)余數(shù)的位置,插入括號即可!
  • 詳細解釋在代碼里, 很好理解!

    Python 用起來很爽, 但是 Java 要考慮負數(shù)轉正數(shù) possible overflow!

    代碼:

    class Solution:def fractionToDecimal(self, numerator: int, denominator: int) -> str:if numerator == 0: return "0"res = []# 首先判斷結果正負, 異或作用就是 兩個數(shù)不同 為 True 即 1 ^ 0 = 1 或者 0 ^ 1 = 1if (numerator > 0) ^ (denominator > 0):res.append("-")numerator, denominator = abs(numerator), abs(denominator)# 判讀到底有沒有小數(shù)a, b = divmod(numerator, denominator)res.append(str(a))# 無小數(shù)if b == 0:return "".join(res)res.append(".")# 處理余數(shù)# 把所有出現(xiàn)過的余數(shù)記錄下來loc = {b: len(res)}while b:b *= 10a, b = divmod(b, denominator)res.append(str(a))# 余數(shù)前面出現(xiàn)過,說明開始循環(huán)了,加括號if b in loc:res.insert(loc[b], "(")res.append(")")break# 在把該位置的記錄下來loc[b] = len(res)return "".join(res)


    同步更新博客:

    一起刷LeetCode - 威行天下 - 博客園?www.cnblogs.com

    總結

    以上是生活随笔為你收集整理的int 小数_[LeetCode] 166. 分数到小数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。