https://leetcode-cn.com/problems/fraction-to-recurring-decimal/
思路:模拟竖式除法即可,关键点在于如何区分有限小数和无限循环小数。其实就是看小数部分会不会出现循环节,在模拟的过程中,如果某个余数出现了多次,那么肯定就是无限循环小数喽。搞个哈希表记录一下位置即可。
class Solution {
public:
using ll=long long;
string fractionToDecimal(ll numerator, ll denominator) {
if(numerator%denominator==0)
return to_string(numerator/denominator);
unordered_map<ll,int> pos;
string ans;
if((numerator<0&&denominator>0)||(numerator>0&&denominator<0))
ans='-';
numerator=abs(numerator);
denominator=abs(denominator);
ans+=to_string(numerator/denominator)+".";
numerator%=denominator;
while(numerator)
{
numerator*=10;
char val=numerator/denominator+'0';
if(pos.count(numerator))
{
int loopBeginIdx=pos[numerator];
return ans.substr(0,loopBeginIdx)+'('+ans.substr(loopBeginIdx,ans.size()-loopBeginIdx)+')';
}
else
{
pos[numerator]=ans.size();
ans+=val;
}
numerator%=denominator;
}
return ans;
}
};