166. Fraction to Recurring Decimal

    xiaoxiao2021-03-26  11

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

    Hint:

    No scary math, just apply elementary math knowledge. Still remember how to perform a long division?Try a long division on 4/9, the repeating part is obvious. Now try 4/333. Do you see a pattern?Be wary of edge cases! List out as many test cases as you can think of and test your code thoroughly.

    Credits: Special thanks to @Shangrila for adding this problem and creating all test cases.

    需要考虑除数是0,负数,溢出的情况,剩下的就是遵循除法规则计算结果。代码如下:

    public class Solution { public String fractionToDecimal(int numerator, int denominator) { if (numerator == 0) { return "0"; } StringBuilder sb = new StringBuilder(); sb.append((numerator > 0) ^ (denominator > 0) ? "-" :""); long num = Math.abs((long)numerator); long den = Math.abs((long)denominator); sb.append(num / den); num = num % den; if (num == 0) { return sb.toString(); } sb.append('.'); HashMap<Long, Integer> hm = new HashMap<Long, Integer>(); hm.put(num, sb.length()); while (num != 0) { num *= 10; sb.append(num / den); num = num % den; if (hm.containsKey(num)) { int index = hm.get(num); sb.insert(index, '('); sb.append(')'); break; } else { hm.put(num, sb.length()); } } return sb.toString(); } }

    转载请注明原文地址: https://ju.6miu.com/read-600063.html

    最新回复(0)