码迷,mamicode.com
首页 > 其他好文 > 详细

Fraction to Recurring Decimal -- leetcode

时间:2015-06-22 15:03:43      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:leetcode   分数   

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:


基本思路:

在计算小数部分时,

需要考虑的是,余数在啥时候开始重复。

用一个map,映射余数和位置。

如果一个余数已经在 map中存着了,那说明开始重复了。

而重复的起始位置,可通过map查知。在该位置处插入 ‘("标记即可。


要注意的事,整数int在转换成其绝对值时,INT_MIN的绝对值,在int范围内将溢出,需要用到64位来存储



class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        if (!numerator) 
            return "0";
            
        string ans;
        if (numerator<0 ^ denominator<0)
            ans += '-';
        
        uint64_t n = abs((int64_t)numerator);
        uint64_t d = abs((int64_t)denominator);
        
        ans += to_string(n/d);
        uint64_t r = n % d;
        if (!r)
            return ans;
        
        ans += '.';
        unordered_map<int, int> pos;
        while (r) {
            if (!pos.insert(make_pair((int)r, ans.size())).second) {
                ans.insert(pos[r], 1, '(');
                ans += ')';
                break;
            }
            r *= 10;
            ans += to_string(r/d);
            r %= d;
        }
        
        return ans;
    }
};


Fraction to Recurring Decimal -- leetcode

标签:leetcode   分数   

原文地址:http://blog.csdn.net/elton_xiao/article/details/46592805

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!