热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode166:分数到循环小数的转换

给定两个整数,分别表示分数的分子和分母,返回该分数的小数形式。如果小数部分是循环的,则将循环部分括在括号内。

给定两个整数,分别表示分数的分子和分母,任务是返回该分数的小数形式。如果小数部分存在循环,则需要将循环部分用括号括起来。

例如:

示例 1:

输入: numerator = 1, denominator = 2
输出: "0.5"

示例 2:

输入: numerator = 2, denominator = 1
输出: "2"

示例 3:

输入: numerator = 2, denominator = 3
输出: "0.(6)"

问题解析:

本题的核心在于如何处理小数部分的循环。首先计算出分数的整数部分,然后通过模拟除法的过程来确定小数部分。在这个过程中,利用哈希表记录每次出现的余数及其位置,一旦发现相同的余数再次出现,即表明小数部分开始循环。

解决方案:

以下是Java语言实现的代码示例:

class Solution {    public String fractionToDecimal(int numerator, int denominator) {        if (numerator == 0) return "0";        if (numerator == Integer.MAX_VALUE && denominator == -1) return String.valueOf((double)numerator / (double)denominator);        long num = (long)numerator;        long den = (long)denominator;        boolean positive = true;        if (num * den <0) positive = false;        num = Math.abs(num);        den = Math.abs(den);        String pre = String.valueOf(num / den);        if (!positive) pre = '-' + pre;        long remain = num % den;        if (remain == 0) return pre;        HashMap m = new HashMap<>();        StringBuilder str = new StringBuilder();        int index = 0;        while (remain != 0 && !m.containsKey(remain)) {            str.append(String.valueOf((remain * 10) / den));            m.put(remain, index++);            remain = (remain * 10) % den;        }        if (remain == 0) return pre + '.' + str.toString();        else {            str.insert((int)m.get(remain), '(');            str.append(')');            return pre + '.' + str.toString();        }    }}

此代码首先处理特殊情况,如分子为0或溢出情况。接着,计算并处理符号,确保最终结果的正负正确。之后,通过循环和哈希表来检测并处理循环小数的情况。


推荐阅读
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
author-avatar
海边的石雨价_288
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有