首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LeetCode 166. 分数到小数(小数除法)

LeetCode 166. 分数到小数(小数除法)

作者头像
Michael阿明
发布于 2020-07-13 15:36:38
发布于 2020-07-13 15:36:38
2K0
举报

1. 题目

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

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

代码语言:javascript
复制
示例 1:
输入: numerator = 1, denominator = 2
输出: "0.5"

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

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/fraction-to-recurring-decimal 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

代码语言:javascript
复制
class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        if(denominator == 0)
        	return "";
        if(numerator == 0)
        	return "0";
        string ans;

        long num = numerator, denom = denominator;
        if((num>0)^(denom>0))//一正一负
        	ans.push_back('-');
        num = abs(num);
        denom = abs(denom);//都转换为整数
        //处理整数部分
        ans.append(to_string(num/denom));

        //处理小数部分
        num %= denom;
        if(num == 0)
        	return ans;
        ans.push_back('.');
        int idx = ans.size()-1;//小数点的下标
        unordered_map<int,int> m;//记录循环出现的小数
        while(num && m.count(num)==0)//余数不为0,且没有出现过
        {
        	m[num] = ++idx;//记录数字的下标
        	num *= 10;//余数扩大10倍
        	ans.append(to_string(num/denom));
        	num %= denom;
        }
        if(m.count(num) == 1)
        {
        	ans.insert(m[num],"(");
        	ans.push_back(')');
        }
        return ans;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 1. 题目
  • 2. 解题
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档