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

分数到小数

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

分数到小数

1、描述

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

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

如果存在多个答案,只需返回 任意一个 。

对于所有给定的输入,保证 答案字符串的长度小于 104 。

示例 1:

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

输入:numerator = 2, denominator = 1
输出:“2”

来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2、关键字

分数,----->小数

3、思路

分数,1 可以直接整除
2、不可整除, -----> 除的尽
------------------>除不尽,循环了

4、notes

1、直接写,如果整除 就直接写,
2、如果没有,就按分析的,使用一个map存起来, 对应数字,和下标,

5、复杂度

时间:O(l),字符串的长度
空间:O(l) 字符串的长度

6、code
class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        long long n = numerator, d = denominator;  // 搞成长整型
        string res;  // 结果集合
        if(n * d < 0) res += "-";// 如果是负数
        if(n < 0) n *= -1;  // 都搞成正数
        if(d < 0) d *= -1;

        long a = n / d;  // 正数部分,得是long 而不能是int
        
        res += to_string(a);
           
        n %= d;  // 取剩下的余数
        if(n == 0){  // 能整除,就直接是结果了,
            return res;
        }
        res += ".";    // 如果不能整除肯定是小数部分:    

        int index = 0;
        string s;  // 存 商
        unordered_map mp;
        while(n && mp.count(n) == 0){  // 除尽,或者出现循环了,就跳出循环
            mp[n] = index++;  // 第一个余数,存到map[0]
            n *= 10;  // 乘以10,为了获取 商,
            s.push_back(n/d + '0');  // 小数点后第一位小数,的商,
            n %= d;  // 再次取一下余数
        }
        if(n != 0){ // 出现循环,
            res += s.substr(0, mp[n]) + "("+ s.substr( mp[n] ) + ")";  // 如果没有第二个参数,
                                                     // 默认搞到结尾,                        
        }
        else{
            res += s;
        }
        return res;




    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/287779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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