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

LC166. 分数到小数

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

LC166. 分数到小数

题目

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

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

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

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

-2^31 <= numerator, denominator <= 2^31 - 1
denominator != 0
思路

这是一道典型的模拟题,可以选用小时候刚学除法时候的思路求解
用除数和被除数相除,整数加入字符串,余数乘10后再与被除数相除直到余数为0
但是此处需要考虑到小数为无限循环小数,可以将余数添加到哈希表中,当循环到余数重复时,说明相除后会呈现循环数,此时退出计算。

代码
class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        long long num=numerator, den=denominator;
        string str;
        if(num*den<0) str+='-';
        num = abs(num);den = abs(den);
        if(!(num%den)){
            str+=to_string(num/den);
            return str;
        }
        str+=to_string(num/den);
        str+='.';
        unordered_map mp;
        string str1;
        num=num%den;
        int i=0;
        while(num&&!mp.count(num)){
            mp[num]=i++;
            num*=10;
            str1+=to_string(num/den);
            num%=den;
        }
        if(num!=0){
        		//str='('+str1+')';
            str1=str1.substr(0, mp[num])+"("+str1.substr(mp[num])+")";
        }
        str+=str1;
        return str;
    }
};
问题
  • 没有考虑到余数乘10后会大于in范围,应用long long
  • 没有考虑到两数可能会出现一正一负的情况,需要对两数取绝对值
  • 第一次判断失误,出现循环小数时将小数点后面的数全判断为循环数
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301351.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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