总结一下:
很多边界问题,有些难处理。
- 处理负数
- 处理INT_MIN溢出
- 无限循环的起始位置
class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
long long N = numerator;
long long D = denominator;
if(N == 0) return "0";
bool flag = false;
if(N < 0){flag = !flag;N = -N;}
if(D <0){flag = !flag;D = -D;}
long long R = N%D; // 余数
long long Q = N/D; // 商
string ans = (flag?"-":"") + to_string(Q) ;
if(R == 0) return ans;
ans += ".";
map<long long,int> mp;
int loc = 0;
queue<long long> q;
N = R;
while(N != 0){
if(mp[N] != 0){
//此时已经循环
int ta = 1;
int tb = mp[N];
while(!q.empty()){
if(ta == tb) ans += '(';
ta++;
ans += (q.front() + '0');
q.pop();
}
ans += ')';
return ans;
}
mp[N] = ++loc;
N *= 10;
while(N < D){
mp[N] = ++loc;
N *= 10;
q.push(0);
}
R = N%D;
Q = N/D;
q.push(Q);
N = R;
}
while(!q.empty()){
ans += (q.front() + '0');
q.pop();
}
return ans;
}
};
本文深入探讨了将任意整数分子与分母转换为小数形式的算法,特别关注处理边界情况,如负数、INT_MIN溢出及无限循环小数的识别。通过使用C++实现的具体代码示例,详细解释了如何避免无限循环并正确处理各种特殊情况。
455

被折叠的 条评论
为什么被折叠?



