ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

287,分数到小数

2021-06-14 22:53:31  阅读:272  来源: 互联网

标签:分数 res denominator numerator num den 287 小数


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

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

示例 1:

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

示例 2:

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

示例 3:

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

答案:

 1public String fractionToDecimal(int numerator, int denominator) {
2    if (numerator == 0) {
3        return "0";
4    }
5    StringBuilder res = new StringBuilder();
6    res.append(((numerator > 0) ^ (denominator > 0)) ? "-" : "");
7    long num = Math.abs((long) numerator);
8    long den = Math.abs((long) denominator);
9    // 整数部分
10    res.append(num / den);
11    num %= den;
12    if (num == 0) {
13        return res.toString();
14    }
15    // 小数部分
16    res.append(".");
17    HashMap<Long, Integer> map = new HashMap<Long, Integer>();
18    map.put(num, res.length());
19    while (num != 0) {
20        num *= 10;
21        res.append(num / den);
22        num %= den;
23        if (map.containsKey(num)) {
24            int index = map.get(num);
25            res.insert(index, "(");
26            res.append(")");
27            break;
28        } else {
29            map.put(num, res.length());
30        }
31    }
32    return res.toString();
33}

解析:

第6行是判断符号位,如果被除数和除数符号相同,则结果为正,否则为负,先计算整数部分,然后再计算小数部分。整数部分比较简单,小数部分我们只需要保存每次相除的余数即可,然后把它保存在HashMap中,如果有重复的说明出现了循环,这题我们还可以参照前面的23,倒数的循环节

标签:分数,res,denominator,numerator,num,den,287,小数
来源: https://blog.51cto.com/u_4774266/2902485

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有