LeetCode答题记录166.分数到小数

LeetCode居然不会保存提交过的代码,就先把写过的记在这里了。

func fractionToDecimal(_ numerator: Int, _ denominator: Int) -> String {
    var num = numerator
    var den = denominator
    if num == 0 {
        return "0"
    }
    if den == 0 {
        return ""
    }
    var isNeg = false
    if num < 0 {
        num = -num
        isNeg = !isNeg
    }
    if den < 0 {
        den = -den
        isNeg = !isNeg
    }
    let zs = num / den
    var rstStr = ""
    if isNeg {rstStr += "-"}
    rstStr += "\(zs)"
    var numDict = [Int:Int]()
    var yushu = num % den
    var i = 0
    numDict[yushu] = i
    var xunhuan = -1
    if yushu != 0 {
        rstStr += "."
    }
    var zsLenth = rstStr.count
    while yushu != 0 {
        i = i+1
        var temp = yushu * 10 / den
        rstStr += "\(temp)"
        yushu = yushu * 10 % den
        if numDict[yushu] != nil {
            xunhuan = numDict[yushu]!
            break;
        }else {
            numDict[yushu] = i
        }
    }
    if xunhuan >= 0 {
        
        rstStr.insert("(", at: rstStr.index(rstStr.startIndex, offsetBy: xunhuan+zsLenth))
        rstStr += ")"
    }
    return rstStr
}

解法简单介绍:
整数部分求得值后,将余数x10 除以除数得出第一位小数。以此类推。
判断循环小数:每次计算前把余数放进字典,如果字典中已经有相同的余数则表示达到循环点。
边界条件的判断略过…

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 2,656评论 0 5
  • leetcode刷题记录本文记录一下leetcode刷题记录,记录一下自己的解法和心得。 LeetCode Two...
    EarthChen阅读 3,510评论 0 6
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,774评论 0 33
  • 时间过的好快啊,转眼半学期就完了。今天让我来总结一下这两个月学习的数学知识吧! 我们第一单元学的是小数除...
    孟向阳阅读 770评论 4 2
  • 文/賈正超 沉天枯叶晨曦无, 孤影病体凉薄冷。 幻雨待雪飘然来, 听赖予汝梦长城。
    賈正超阅读 254评论 1 2