当前位置: 首页 > article >正文

【Leetcode刷题记录】166. 分数到小数

166. 分数到小数

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数

如果小数部分为循环小数,则将循环的部分括在括号内。

如果存在多个答案,只需返回 任意一个

对于所有给定的输入,保证 答案字符串的长度小于 104

首先要明确两个数相除的结果肯定是整数,有限小数,或无限循环小数。那么可以通过模拟手动除法,也就是竖式除法的过程来求解这道题。手动除法的过程就是不断对余数补0,再重新计算余数和除数的新余数,由于我们一直是对余数进行补0操作,那么如果出现了相同的余数,就说明产生了循环小数

解题步骤如下:

  1. 处理符号
    • 首先确定结果的符号。如果分子和分母的符号不同,结果为负数;否则为正数。
    • 将分子和分母都转换为绝对值,方便后续计算。
  2. 计算整数部分
    • 使用整数除法计算整数部分,即 numerator // denominator
    • 将结果存入字符串res中。
  3. 计算小数部分
    • 使用取余运算 numerator % denominator 得到余数。
    • 如果余数为0,说明结果是整数或有限小数,直接返回结果。
    • 如果余数不为0,开始模拟除法过程:
      • 初始化一个哈希表 remainder_map,用于记录余数出现的位置。
      • 循环处理余数,直到余数为0或发现循环:
        • 将余数乘以10,得到新的被除数。
        • 计算新的商,即 new_numerator // denominator,并将其添加到 res 中。
        • 计算新的余数,即 new_numerator % denominator
        • 如果余数已经存在于 remainder_map 中,说明出现了循环,获取余数第一次出现的位置,利用字符串截取和拼接操作返回题目要求的格式。
        • 否则,将余数和当前位置存入 remainder_map 中。

代码

string fractionToDecimal(int numerator, int denominator) {
    string res;
    long a = numerator, b = denominator;
    if (a % b == 0) {
        res += to_string(a / b);
        return res;
    }
    if (a * b < 0) {
        res.push_back('-');
    }
    a = abs(a), b = abs(b);
    res += to_string(a / b) + ".";
    a %= b;
    unordered_map<long, int> mp;
    while (a != 0) {
        mp[a] = res.length();
        a *= 10;
        res += to_string(a / b);
        a %= b;
        if (mp.find(a) != mp.end()) {
            int u = mp[a];
            return res.substr(0, u) + "(" + res.substr(u) + ")";
        }
    }
    return res;
}

http://www.kler.cn/a/526742.html

相关文章:

  • 商密测评题库详解:商用密码应用安全性评估从业人员考核题库详细解析(8)
  • 详解u3d之AssetBundle
  • SpringCloud系列教程:微服务的未来(十八)雪崩问题、服务保护方案、Sentinel快速入门
  • NVIDIA GPU介绍:概念、序列、核心、A100、H100
  • 策略梯度 (Policy Gradient):直接优化策略的强化学习方法
  • qt内部的特殊技巧【QT】
  • [EAI-022] FuSe,在VLA模型基础上,融合触觉和语音等异构模态信息
  • 动态规划两个数组dp问题系列一>最长公共子序列
  • 网站快速收录:利用RSS订阅提升效率
  • fpga系列 硬件:FPGA VITIS PS端HELLO WORLD在 ZYNQ EBAZ4203板上实现
  • ADC 精度 第二部分:总的未调整误差解析
  • 33333333333
  • Autogen_core 测试代码:test_cancellation.py
  • Electron工具Electron Fiddle
  • 【TypeScript】TypeScript 运算符
  • AI 的安全性与合规性:实践中的最佳安全策略
  • 【Block总结】PKI 模块,无膨胀多尺度卷积,增强特征提取的能力|即插即用
  • 【华为OD-E卷 - 分积木 100分(python、java、c++、js、c)】
  • Autogen_core: test_code_executor.py
  • 算法---快速排序
  • Python3 【集合】避坑指南:常见错误解析
  • 【解决方案】MuMu模拟器移植系统进度条卡住98%无法打开
  • 快速提升网站收录:避免常见SEO误区
  • 深入解析JPA实体监听器的使用与实践
  • AI学习指南HuggingFace篇-Hugging Face 的环境搭建
  • 自由学习记录(33)