166. Fraction to Recurring Decimal

来源:互联网 发布:node v6.3.0 x64.msi 编辑:程序博客网 时间:2024/05/17 19:20

今天华为出了这么一道面试题,当时我一紧张,没写出来。。。关键是记录循环小数,采用map结构。

注意leetcode上这道题要防止溢出。将int 转换为long。一般来说int为4个字节,如果long也为4个字节的话,这样转换还是不成功的,由此我推断leetcode系统的编译器应该是64位的,这样long是8个字节,这样就避免了溢出。


class Solution {public:string fractionToDecimal(int numerator, int denominator) {if (numerator == 0)return "0";if (denominator == 0)return "";string result;if (numerator < 0 ^ denominator < 0){result += '-';}long num = abs((long)numerator);long den = abs((long)denominator);long t1 = num / den;long t2 = num%den;if (t2 == 0)return result + to_string(t1);result += to_string(t1) + ".";unordered_map<long, long> mp;while (t2 != 0){if (mp.find(t2) != mp.end()){result.insert(mp[t2], 1, '(');result += ")";break;}long size = result.size();mp.insert(make_pair(t2, size));t2 *= 10;result += to_string(t2 / den);t2 = t2%den;}return result;}};


1 0