166. 分数到小数 (模拟除法)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了166. 分数到小数 (模拟除法)相关的知识,希望对你有一定的参考价值。

166. 分数到小数 (模拟除法)

用一个map记录余被除数。

4 333 \\dfrac{4}{333} 3334

4 % 333 × 10 = 40 , m p ( 40 ) = 1 4\\% 333\\times 10=40,mp(40)=1 4%333×10=40,mp(40)=1

40 % 333 × 10 = 400 , m p ( 400 ) = 1 40\\% 333\\times10=400,mp(400)=1 40%333×10=400,mp(400)=1

400 % 333 × 10 = 670 , m p ( 670 ) = 1 400\\%333\\times10=670,mp(670)=1 400%333×10=670,mp(670)=1

670 % 333 × 10 = 40 670\\%333\\times 10=40 670%333×10=40

一些细节需要注意,如先都转成long long

不然-2147483648/-1 用abs会出问题。

typedef long long ll;
class Solution {
public:
    string fractionToDecimal(int x, int y) {
        if((ll)x%y==0) return to_string((ll)x/y);
        else {
          
            int f=(x<0)^(y<0);
            ll up=llabs((ll)x),down=llabs((ll)y);
            string s=(f?"-":"")+to_string(up/down)+".";
            unordered_map<ll,int>mp;
            for(int i=s.size();up=up%down*10;++i){
                if(mp.count(up)){
                    s.insert(s.begin()+mp[up],'(');
                    s.push_back(')');break;
                }
                mp[up]=i;
                s.push_back(up/down+'0');
            }
            return s;
        }
    }
};

以上是关于166. 分数到小数 (模拟除法)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode166 分数到小数

LeetCode 166. Fraction to Recurring Decimal(模拟)

LeetCode第166题—分数到小数——Python实现

LeetCode第166题—分数到小数——Python实现

LeetCode第166题—分数到小数——Python实现

题目地址(166. 分数到小数)