美文网首页
LeetCode答题记录166.分数到小数

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

作者: 渣新iOS程序员sun某 | 来源:发表于2018-08-07 01:06 被阅读0次

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 除以除数得出第一位小数。以此类推。
判断循环小数:每次计算前把余数放进字典,如果字典中已经有相同的余数则表示达到循环点。
边界条件的判断略过…

相关文章

网友评论

      本文标题:LeetCode答题记录166.分数到小数

      本文链接:https://www.haomeiwen.com/subject/qrinvftx.html