栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode-每日一题2021.10.3 分数到小数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode-每日一题2021.10.3 分数到小数

题目

力扣

思路

竖式法,分为整数,有限小数和无限循环小数三种情况。如果得到的是整数,直接用to_string返回。是小数的情况就先确定正负号,如果两个数同号就取正号,如果两个数异号就取负号。然后再加上整数部分和小数点。如果是无限循环小数的情况,可以用余数相同来判断是否有循环,用unordered_map存储小数后面的余数,如果余数相同就加上左右两边的括号,并且退出循环。

代码
class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        if((int64_t)numerator%denominator==0)
            return to_string((int64_t)numerator/denominator);
        int64_t up=abs((int64_t)numerator),down=abs((int64_t)denominator);
        string ans(((numerator<0)^(denominator<0)?"-":"")+to_string(up/down)+".");
        unordered_map index;

        for(int i=ans.size();up=up%down*10;i++){
            if(index.count(up)){
                ans.insert(ans.begin()+index[up],'(');
                ans.push_back(')');
                break;
            }
            index[up]=i;
            ans.push_back('0'+up/down);
        }
        return ans;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号