当前位置 博文首页 > 文章内容

    leetcode刷题笔记一百六十六题 分数到小数

    作者: 栏目:未分类 时间:2020-09-05 18:02:21

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    leetcode刷题笔记一百六十六题 分数到小数

    源地址:166. 分数到小数

    问题描述:

    给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。

    如果小数部分为循环小数,则将循环的部分括在括号内。

    示例 1:

    输入: numerator = 1, denominator = 2
    输出: "0.5"
    示例 2:

    输入: numerator = 2, denominator = 1
    输出: "2"
    示例 3:

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

    //基于一些数学原理处理 细节需要考虑较多
    import scala.collection.mutable
    object Solution {
        def fractionToDecimal(numberator: Int, denominator: Int): String = {
            val sb = new mutable.StringBuilder()
            
            if (numberator == 0) return "0"
            if ((numberator >= 0) ^ (denominator >= 0)) sb += '-'
            
            var num = math.abs(numberator.toLong)
            var denom = math.abs(denominator.toLong)
            var remaining = num % denom
            sb.append(num/denom)
            
            //除法运算结束
            if (remaining == 0) return sb.toString
            else{
                //进行小数部分处理
                remaining = remaining * 10
                sb += '.'
                //设计hashmap标记循环小数
                val map = mutable.HashMap[(Long, Long), Int]()
                
                while (remaining > 0) {
                    val digit = remaining / denom
                    remaining = remaining % denom
                    
                    if (map.contains((digit, remaining))){
                        val index = map((digit, remaining))
                        sb.insert(index, '(')
                        sb += ')'
                        return sb.toString
                    }
                    else{
                        sb.append(digit)
                        map.put((digit, remaining), sb.size-1)
                        remaining = remaining * 10
                    }
                }
                return sb.toString
            }
        }
    }