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;
    
    }
  • 相关阅读:
    OpenSSL 安装 (Linux系统)
    JVM 指令集
    Github清除历史提交,保留最新提交
    php7+apache2.4 安装(window)
    mysql 函数模拟序列
    SpringBoot配置成Liunx服务
    Liunx下NFS服务器的搭建与配置
    Laravel 出现"RuntimeException inEncrypter.php line 43: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths."问题的解决办法
    win7安装laravel
    win7安装composer
  • 原文地址:https://www.cnblogs.com/argenbarbie/p/5801675.html
Copyright © 2011-2022 走看看