LeetCode166-分数到小数-字符串-高精度除法

本文介绍了一种模仿高精度除法过程的C++代码,通过`fractionToDecimal`函数将分数转换为小数形式,包括符号判断、整数部分书写、循环处理余数并记录位置。关键步骤包括使用unordered_map跟踪重复余数。
摘要由CSDN通过智能技术生成

原题链接
在这里插入图片描述

Note:

模仿高精度除法的过程

1、开个字符串,先判断一下正负,把符号标记上
2、先把整数位置给写上
3、开始循环,当余数不为0的时候,就一直走
4、把当前这个余数对应的位置记录一下,然后乘10 除法 放答案
5、判断新的余数是不是出现过了,如果出现过break否则继续循环
代码如下:
class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        typedef long long LL;
        LL x = numerator, y = denominator;
        if(x % y == 0)  return to_string(x / y);
        unordered_map<LL, int> S;
        string ans;
        if( (x < 0 && y > 0) || (x > 0 && y < 0))   ans += "-";
        x = abs(x), y = abs(y);
        ans += to_string(x / y) + '.';
        x %= y;
        while(x){
            S[x] = ans.size();
            x *= 10;
            ans += to_string(x / y);
            x %= y;
            if(S.count(x)){
                ans = ans.substr(0, S[x]) + "(" + ans.substr(S[x]) + ")";
                break;
            }
            
        }
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值