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

#leetcode#Fraction to Recurring Decimal

时间:2015-07-13 10:29:56      阅读:115      评论: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)".
解题思路是首先判断正负, 这里用了异或的方法来判断: (numerator > 0)^(denominator > 0)  == 1   -->  是负数
然后整数部分很好得到, 直接  stringBuilder.append(numerator / denominator) 就可以了,
然后是小数部分的判断, 首先 append(‘.‘), 每次计算取余数 remainder, 并把remainder作为key, 当前 stringbuilder的长度作为value存入hashmap,则当remainder重复出现时我们知道这个除法运算进入了无限循环, 加括号跳出循环。
有很多corner case,比如 -1 / -2147483648, 所以用long来防止溢出, 
public class Solution {
    public String fractionToDecimal(int numerator, int denominator) {
        if(numerator == 0)
            return "0";
        StringBuilder sb = new StringBuilder();
        if((numerator > 0) ^ (denominator > 0))
            sb.append('-');
        long num = Math.abs((long)numerator);
        long den = Math.abs((long)denominator);
        sb.append(num / den);
        if(num % den == 0)
            return sb.toString();
        sb.append(".");
        Map<Long, Integer> map = new HashMap<>();
        while(num != 0){
            long remainder = num % den;
            if(!map.containsKey(remainder)){
                map.put(remainder, sb.length());
                remainder *= 10;
                sb.append(remainder / den);
                num = remainder % den;
            }else{
                sb.insert(map.get(remainder), "(");
                sb.append(")");
                break;
            }
        }
        
        return sb.toString();
    }
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

#leetcode#Fraction to Recurring Decimal

标签:leetcode

原文地址:http://blog.csdn.net/chibaoneliuliuni/article/details/46857475

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