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

2018-08-07  本文已影响0人  渣新iOS程序员sun某

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

上一篇 下一篇

猜你喜欢

热点阅读