美文网首页
分数到小数

分数到小数

作者: 王王王王王景 | 来源:发表于2019-08-05 21:20 被阅读0次

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

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

    示例 1:

    输入: numerator = 1, denominator = 2
    输出: "0.5"
    

    示例 2:

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

    示例 3:

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

    代码:

    class Solution {
    public:
        string fractionToDecimal(int numerator, int denominator) {
            long _num = numerator == INT_MIN ? 0x80000000 : abs(numerator);
            long _den = denominator == INT_MIN ? 0x80000000 : abs(denominator);
            // 先计算整数部分
            long zs = _num / _den;
            if(zs < 0) zs *= -1;
            _num = _num % _den;
            // 判断是否为正数
            bool is_pos = ((numerator ^ denominator) >= 0 ? true : false);
            vector<long> re; // 用于记录小数部分
            // 用来存放被使用的被除数,用于判断是否存在循环小数,对应的是在re中的下标
            unordered_map<long, int> _map; 
            int crc_index = -1; // 记录循环小数的起始下标
            while(_num != 0) {
                while(_num < _den) {
                    _num *= 10;
                    if(_num < _den)
                        re.push_back(0);
                }
                if(_map.find(_num) != _map.end()) {
                    // 存在循环小数
                    crc_index = _map[_num];
                    break;
                } else {
                    re.push_back(_num / _den);
                    _map[_num] = re.size() - 1;
                    _num %= _den;
                }
            }
            string re_str= to_string(zs);
            if(re.size() > 0) re_str += ".";
            for(int i = 0; i < re.size(); ++i) {
                if(i == crc_index) {
                    re_str += "(";
                }
                re_str += to_string(re[i]);
            }
            if(crc_index != -1) re_str += ")"; // 有循环小数
            if(!is_pos && numerator != 0) re_str = "-" + re_str; // 负数情况
            return re_str;
        }
    };
    

    相关文章

      网友评论

          本文标题:分数到小数

          本文链接:https://www.haomeiwen.com/subject/sgvvdctx.html