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,
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
原文地址:http://blog.csdn.net/elton_xiao/article/details/46592805