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. 分数到小数 (模拟除法)的主要内容,如果未能解决你的问题,请参考以下文章