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.

    Example 1:

    Input: numerator = 1, denominator = 2
    Output: "0.5"
    

    Example 2:

    Input: numerator = 2, denominator = 1
    Output: "2"

    Example 3:

    Input: numerator = 2, denominator = 3
    Output: "0.(6)"

    Approach #1: C++

    class Solution {
    public:
        typedef long long LL;
        string fractionToDecimal(int numerator, int denominator) {
            if (!numerator) return "0";
            string res;
            if (numerator < 0 ^ denominator < 0) res += '-';
            LL numer = numerator < 0 ? (LL)numerator * (-1) : (LL)numerator;
            LL denom = denominator < 0 ? (LL)denominator * (-1) : (LL)denominator;
            LL quotient = numer / denom;
            LL remainder = numer % denom;
            res += to_string(quotient);
            if (!remainder) return res;
            res += '.';
            remainder *= 10;
            cout << remainder << endl;
            unordered_map<LL, LL> mp;
            while (remainder) {
                quotient = remainder / denom;
                if (mp.find(remainder) != mp.end()) {
                    res.insert(mp[remainder], 1, '(');
                    res += ')';
                    break;
                }
                mp[remainder] = res.size();
                res += to_string(quotient);
                remainder = (remainder % denom) * 10;
            }
            return res;
        }
    };
    

      

    Approach #2: Java

    class Solution {
        public String fractionToDecimal(int numerator, int denominator) {
            StringBuilder result = new StringBuilder();
            String sign = (numerator < 0 == denominator < 0 || numerator == 0) ? "" : "-";
            long num = Math.abs((long) numerator);
            long den = Math.abs((long) denominator);
            result.append(sign);
            result.append(num / den);
            long remainder = num % den;
            if (remainder == 0)
                return result.toString();
            result.append(".");
            HashMap<Long, Integer> hashMap = new HashMap<Long, Integer>();
            while (!hashMap.containsKey(remainder)) {
                hashMap.put(remainder, result.length());
                result.append(10 * remainder / den);
                remainder = 10 * remainder % den;
            }
            int index = hashMap.get(remainder);
            result.insert(index, "(");
            result.append(")");
            return result.toString().replace("(0)", "");
        }
    };
    

      

    Approach #3: Python

    class Solution(object):
        def fractionToDecimal(self, numerator, denominator):
            """
            :type numerator: int
            :type denominator: int
            :rtype: str
            """
            res = ""
            if numerator/denominator < 0:
                res += '-'
            if numerator%denominator == 0:
                return str(numerator/denominator)
            numerator = abs(numerator)
            denominator = abs(denominator)
            res += str(numerator/denominator)
            res += '.'
            numerator %= denominator
            i = len(res)
            table = {}
            while numerator != 0:
                if numerator not in table.keys():
                    table[numerator] = i
                else:
                    i = table[numerator]
                    res = res[:i] + "(" + res[i:] + ")"
                    return res
                numerator = numerator * 10
                res += str(numerator/denominator)
                numerator %= denominator
                i += 1
            return res
            
            
    

    In this case if we use Python3 it will report error.

    Time SubmittedStatusRuntimeLanguage
    a few seconds ago Accepted 32 ms python
    11 minutes ago Accepted 6 ms java
    23 minutes ago Accepted 0 ms cpp
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    【转】基于keras 的神经网络股价预测模型
    [转]Python中yield的解释
    【转】类似py2exe软件真的能保护python源码吗
    [转]You Could Become an AI Master Before You Know It. Here’s How.
    【转】Linux安装HDF5及遇到的问题总结
    [转]TA-Lib 安装
    【转】Python metaclass
    【转】解决ubuntu13.10下,无法双击运行脚本文件
    ubuntu16 配置git
    ubuntu16 安装matplotlib
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9944000.html
Copyright © 2011-2022 走看看