设为首页 加入收藏

TOP

Leetcode: Fraction to Recurring Decimal
2015-07-20 17:20:49 来源: 作者: 【 】 浏览:2
Tags:Leetcode: Fraction 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)".

    Solution:

    1、用一个map来记录n除以d的过程中被除数的变化,以及当被除数为n时相应的商在返回结果string中的位置,方便以后添加(。

    2、负数变正数的时候会越界,下面的例子2^31 = 2 147 483 648,int表示范围(-2147483648~2147483647),所以要用long long:

    Input:-1, -2147483648

    Output:"0.0000000000000000000000000000001"

    Expected:"0.0000000004656612873077392578125"

    ?

    class Solution {
    public:
    	string fractionToDecimal(int numerator, int denominator) {
    		string res = "";
    		if (numerator == 0) return "0";
    		if (denominator == 0)return res;
    
    		long long n = numerator;
    		long long d = denominator;
    		if ((n < 0 && d > 0) || (n > 0 && d < 0))
    			res = "-";
    		if (n < 0) n = -n;
    		if (d < 0) d = -d;
    		res += to_string(n / d);
    		n = n%d;
    		if (n == 0) return res;
    		res += '.';
    
    		int pos = res.size();
    		map
        
          record;
    		while (n != 0) {
    			if (record.find(n) != record.end()) {
    				res.insert(res.begin() + record[n], '(');
    				res += ')';
    				return res;
    			}
    			record[n] = pos;
    			res += char(n * 10 / d + '0');
    			pos++;
    			n = (n * 10) % d;
    		}
    		return res;
    	}
    };
        


    ?

    ?

    ?

    ?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[LeetCode]Valid Parentheses 下一篇c++中 的向量vector

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C 内存管理 | 菜鸟教 (2025-12-26 20:20:37)
·如何在 C 语言函数中 (2025-12-26 20:20:34)
·国际音标 [ç] (2025-12-26 20:20:31)
·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)