zoukankan      html  css  js  c++  java
  • 166. Fraction to Recurring Decimal -- 将除法的商表示成字符串(循环节用括号表示)

    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)".
    string fractionToDecimal(int numerator, int denominator) {
    
        string result;
    
        //deal with the `ZERO` cases
    
        if (denominator == 0){ return result; }
    
        if (numerator == 0) { return "0"; }
    
    
    
        //using long long type make sure there has no integer overflow
    
        long long n = numerator;
    
        long long d = denominator;
    
    
    
        //deal with negtive cases 
    
        bool sign = ((float)numerator/denominator >= 0);
    
        if ( n < 0 ){ n = -n; }
    
        if ( d < 0 ){ d = -d; }
    
        if (sign == false){
    
            result.push_back('-');
    
        }
    
    
    
        long long remainder = n % d;
    
        long long division = n / d;
    
        ostringstream oss;
    
        oss << division;
    
        result += oss.str();
    
        if (remainder == 0){
    
            return result;
    
        }
    
        //remainder has value, the result is a float
    
        result.push_back('.');
    
    
    
        //using a map to record all of reminders and their position.
    
        //if the reminder appeared before, which means the repeated loop begin, 
    
        //then, get the place from map to insert "(".
    
        //(In C++11, it's better to use unordered_map )
    
        map<long long, int> rec;
    
    
    
        for (int pos=result.size(); remainder!=0; pos++, remainder=(remainder*10)%d ) {
    
            if (rec.find(remainder) != rec.end()) {
    
                result.insert(result.begin()+rec[remainder], '(');
    
                result.push_back(')');
    
                return result;
    
            }
    
            rec[remainder] = pos;
    
            result.push_back((remainder*10)/d + '0');
    
        }
    
    
    
        return result;
    
    }
  • 相关阅读:
    JS新API标准 地理定位(navigator.geolocation
    微信公众号菜单
    js选择权
    mui 弹框
    又拍云
    弹框
    sublime插件
    将Apache的.htaccess转换到nginx中
    php 图片上传类
    C# 使用Com组件正确的释放方法
  • 原文地址:https://www.cnblogs.com/argenbarbie/p/5801675.html
Copyright © 2011-2022 走看看