zoukankan      html  css  js  c++  java
  • [LeetCode] 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)".

    Credits:
    Special thanks to @Shangrila for adding this problem and creating all test cases.

    Hide Tags
     Hash Table Math
     
     
      题目其实挺容易的,需要考虑的是溢出问题,long int 长度是32 位的, long long int 才是64位。
     
    #include <iostream>
    #include <unordered_map>
    #include <string>
    #include <sstream>
    using namespace std;
    
    class Solution {
    public:
        string fractionToDecimal(int numerator, int denominator) {
            bool flag1 = numerator<0;
            bool flag2 = denominator<0;
            unsigned numer = flag1?-numerator:numerator;
            unsigned denom = flag2?-denominator:denominator;
    
            if(denom==0)  return "";
            if(numer==0)    return "0";
            stringstream ss;
            ss<<numer/denom;
            string ret = ss.str();
            unsigned long long int lft = numer%denom;
    
            unordered_map<unsigned int,unsigned int> mp;
            string ret1="";
            unsigned int cnt = 1;
            while(lft){
                if(mp[lft]==0){
                    mp[lft]=cnt++;
                    ret1 += (lft*10)/denom + '0';
                    lft = (lft*10)%denom;
                    continue;
                }
                ret1 = ret1.substr(0,mp[lft]-1) + "(" + ret1.substr(mp[lft]-1) + ")";
                break;
            }
            if(ret1 != "")    ret += "." + ret1;
            if(flag1^flag2) ret = "-" + ret;
            return ret;
        }
    };
    
    int main()
    {
        Solution sol;
        cout<<sol.fractionToDecimal(-1,-2147483648)<<endl;
        return 0;
    }
  • 相关阅读:
    拦截器
    Mysql修改字段类型,修改字段名
    1.Spring对JDBC整合支持
    由system.currentTimeMillis() 获得当前的时间
    spring 对jdbc的简化
    spring对JDBC的整合支持
    java 运行时异常与非运行时异常理解
    MySQL5.7 的新特点
    基于 SSL 的 Nginx 反向代理
    如何使用 lsyncd 实时同步并执行 shell 命令
  • 原文地址:https://www.cnblogs.com/Azhu/p/4382037.html
Copyright © 2011-2022 走看看