zoukankan      html  css  js  c++  java
  • 166. Fraction to Recurring Decimal (Math)

    Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.

    If the fractional part is repeating, enclose the repeating part in parentheses.

    For example,

    • Given numerator = 1, denominator = 2, return "0.5".
    • Given numerator = 2, denominator = 1, return "2".
    • Given numerator = 2, denominator = 3, return "0.(6)".
    class Solution {
    public:
        string fractionToDecimal(int numerator, int denominator) {
            //deal with overflow (eg: -2147483648/-1, -1/-2147483648)
            long l_numerator = (long) numerator;
            long l_denominator = (long) denominator;
    
            //deal with negative
            string ret = "";
            int p = 0; //pointer to the return string
            if((l_numerator < 0 && l_denominator > 0) || (l_numerator > 0 && l_denominator < 0)) {
                ret += "-";
                p++;
            }
            l_numerator = abs(l_numerator);
            l_denominator = abs(l_denominator);
            
            long quotient = l_numerator/l_denominator; 
            long residue = l_numerator%l_denominator;
            unordered_map<int,int> res_pos_map;
            stringstream ss;
            string sTmp;
            
            ss << quotient;
            ss >> sTmp;
            ret += sTmp;
            p+=sTmp.size();
            
            if(residue!=0) {
                ret += ".";
                p++;
                res_pos_map[residue]=p;
            }
            
            while(residue!=0){
                l_numerator = residue * 10;
                quotient = l_numerator/l_denominator;
                residue = l_numerator%l_denominator;
                ss.clear();
                ss << quotient;
                ss >> sTmp;
                ret += sTmp;
                p++;
                if(res_pos_map.find(residue)==res_pos_map.end()){
                    res_pos_map[residue]=p;
                }
                else{
                    ss.clear();
                    ss << quotient;
                    ss >> sTmp;
                    ss.clear();
                    ss << residue*10/l_denominator;
                    ss >> sTmp;
                    ret = ret.substr(0,res_pos_map[residue]) + "(" + ret.substr(res_pos_map[residue]) + ")";
                    return ret;
                }
            }  
            return ret;
        
        }
    };
  • 相关阅读:
    inline-block 文字与图片不对齐
    js去除数组重复项
    react2
    kfaka windows安装
    sigar 监控服务器硬件信息
    Disruptor
    Servlet 3特性:异步Servlet
    jvmtop 监控
    eclipse如何debug调试jdk源码
    一致性hash算法
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/6603137.html
Copyright © 2011-2022 走看看