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;
}

 

相关文章:

  • 2021-10-19
  • 2021-06-08
  • 2022-02-02
  • 2021-06-04
  • 2021-11-01
  • 2022-12-23
  • 2022-01-19
猜你喜欢
  • 2022-02-23
  • 2021-09-20
  • 2022-01-08
  • 2021-10-11
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案