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

每日一题(2)

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

每日一题(2)

题目 分数到小数

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

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

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

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

解题思路
  1. 是否会有溢出
  2. 先计算整数部分,再计算小数部分
  3. 对于循环小数,确定循环位置
  4. 分子分母异号
代码
class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        long numeratorlong = numerator, denominatorlong = denominator;
         // 整除
        if(numeratorlong % denominatorlong == 0)
        {
            return to_string(numeratorlong / denominatorlong);
        }
        
        string res;
        // 异号 通过异或来判断
        if(numeratorlong < 0 ^ denominatorlong < 0)
        {
            res.push_back('-');
        }
        // 	符号已经判断过,取正整数进行计算
        numeratorlong = abs(numeratorlong);
        denominatorlong = abs(denominatorlong);
        res += to_string(numeratorlong / denominatorlong) + ".";
        long rem = numeratorlong % denominatorlong;
        unordered_map data;
        int id = 0;
        string fraction;
		// 通过判断余数出现次数来判断循环位置,如果这个余数之前出现过,则进入循环
        while(rem != 0 && !data.count(rem))
        {
            data[rem] = id;
            rem *= 10;
            fraction += to_string(rem / denominatorlong);
            rem %= denominatorlong;
            ++id;
        }
        if(rem != 0)
        {
            int i = data[rem];
            fraction = fraction.substr(0,i) + '(' + fraction.substr(i);
            fraction.push_back(')');
        }
        res += fraction;
        return res;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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