博客
关于我
LeetCode 166. Fraction to Recurring Decimal
阅读量:802 次
发布时间:2023-01-30

本文共 1741 字,大约阅读时间需要 5 分钟。

分数转换为小数的优雅解决方案

将两个整数作为分子和分母处理时,需要将结果表示为小数形式。这种情况下,如果分数无法整除,可能会出现无限循环的小数部分。我们的任务是正确地将这些情况表示出来。

问题描述

给定两个整数,分子和分母,目标是将其转换为小数字符串格式。在循环小数的情况下,循环节需要用括号括起来。例如:

  • 给定分子 = 1,分母 = 2,结果是“0.5”。
  • 给定分子 = 2,分母 = 3,结果是“0.(6)”。
  • 给定分子 = 7,分母 = 6,结果是“1.1(6)”。

解题思路

我们可以通过模拟手工除法来找到循环节。每次将余数乘以10,然后除以分母。如果余数重复出现,就可以确定小数部分开始循环。

  • 除法模拟:将分子和分母代入长除法算法。每次取整数部分,并记录余数。
  • 余数检测:使用哈希表记录余数第一次出现的位置。如果余数重复,就说明出现了循环节。
  • 分离整数部分和小数部分:整数部分直接从除法中得到,小数部分则根据余数变化记录。
  • 这种方法避免了直接处理小数部分带来的复杂性,能高效地处理循环小数问题。

    代码实现

    以下是我们为实现上述思路开发的代码:

    Solution.filename = "fractionToDecimal.java";public class Solution {    public String fractionToDecimal(int numerator, int denominator) {        if (numerator == 0) {            return "0";        }        StringBuilder fraction = new StringBuilder();        // 处理负号        if ((numerator < 0 ^ denominator < 0) {            fraction.append("-");        }        long num = Math.abs((long) numerator);        long denom = Math.abs((long) denominator);        fraction.append(num / denom);        long remainder = num % denom;        if (remainder == 0) {            return fraction.toString();        }        fraction.append(".");        HashMap
    map = new HashMap<>(); while (remainder != 0) { if (map.containsKey(remainder)) { fraction.insert(map.get(remainder), '('); fraction.append(')'); break; } map.put(remainder, fraction.length()); remainder *= 10; fraction.append(remainder / denom); remainder %= denom; } return fraction.toString(); }}

    代码解析

  • 初始化处理:首先检查分子是否为0,如果是,直接返回"0"。
  • 符号处理:判断分子和分母的符号,确保结果的小数部分符号正确。
  • 整数部分计算:通过整数除法得到整数部分,并记录余数。
  • 余数循环处理:使用哈希表记录余数位置,找到循环节表示的位置,并在字符串中插入括号。
  • 这种方法能有效且准确地将分数转换为小数格式,同时正确处理循环小数的情况。

    转载地址:http://fagyk.baihongyu.com/

    你可能感兴趣的文章
    no connection could be made because the target machine actively refused it.问题解决
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named 'pandads'
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>
    No static resource favicon.ico.
    查看>>
    no such file or directory AndroidManifest.xml
    查看>>
    No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
    查看>>
    NO.23 ZenTaoPHP目录结构
    查看>>