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.

Solution

public class Solution {
     public String fractionToDecimal(int numerator1, int denominator1) {
        Long denominator = new Long(denominator1);
        Long numerator = new Long(numerator1);

        if (denominator == 0) return "";
        if (numerator == 0) return "0";

        boolean falg =true;
        if (numerator < 0 && denominator > 0)  falg = false;
        if (numerator > 0 && denominator < 0) falg = false;

        denominator = Math.abs(denominator);
        numerator = Math.abs(numerator);

        StringBuffer sb = new StringBuffer();
        Long d = numerator / denominator;
        sb.append(d);

        Long r =  (numerator % denominator);
        if (r == 0) {
            if (!falg) {
                sb.insert(0, "-");
            }


            return sb.toString();
        }

        sb.append(".");

        r *= 10;
        Map<Long, Integer> map = new HashMap<>();

        while (r != 0) {
            if (map.containsKey(r)) {
                sb.insert(map.get(r), "(");
                sb.append(")");

                break;
            }

            map.put(r, sb.length());

            sb.append(r / denominator);
            r = r % denominator;
            r *= 10;
        }


        if (!falg) {
            sb.insert(0, "-");
        }

        return sb.toString();
    }
}

results matching ""

    No results matching ""