程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Leetcode: Fraction to Recurring Decimal

Leetcode: Fraction to Recurring Decimal

編輯:關於C++

 

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;
    	}
    };


     

     

     

     

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved