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)".

题意很简单,就是把分数转换成小数。

 

 

方法也没什么难的,就是利用HashMap来存储余数出现的位置,遇到相同余数,那么就是循环小数了。

 

需要注意的点:1、int的最小值,这个神烦,只能用long来存储计算。

       2、正负号

       3、整除没有小数点。

 

public class Solution {
    public String fractionToDecimal(int numerator, int denominator) {
        if (numerator == 0){
            return "0";
        }
        long num1 = Math.abs((long)numerator);
        long num2 = Math.abs((long)denominator);
        StringBuffer str = new StringBuffer();
        if (numerator < 0 ^ denominator < 0 ){
            str.append('-');
        }
        long div = num1 / num2;
        long mod = num1 % num2;
        if (mod == 0){
            str.append(div);
            return str.toString();
        }
        Map map = new HashMap<Long,Integer>();
        str.append(div+".");
        map.put(mod,str.length());
        num1 = mod * 10;
        while (mod != 0){
            div = num1 / num2;
            mod = num1 % num2;
            str.append(div);
            if (map.containsKey(mod)){
                str.insert((int)map.get(mod),'(');
                str.append(')');
                return str.toString();
            }
            map.put(mod,str.length());
            num1 = mod * 10;
        }
        return str.toString();
    }
}