zoukankan      html  css  js  c++  java
  • 166 Fraction to Recurring Decimal 分数到小数

    给定两个整数,分别表示分数的分子和分母,返回字符串格式的小数。
    如果小数部分为循环小数,则将重复部分括在括号内。
    例如,
        给出 分子 = 1, 分母 = 2,返回 "0.5".
        给出 分子 = 2, 分母 = 1,返回 "2".
        给出 分子 = 2, 分母 = 3,返回 "0.(6)".

    详见:https://leetcode.com/problems/fraction-to-recurring-decimal/description/

    Java实现:

    class Solution {
        public String fractionToDecimal(int numerator, int denominator) { 
            if(numerator == 0){
                 return "0";
            }
            if(denominator == 0){
                return "";
            } 
            
            String res = "";
            
            //判断结果是否为负数,加负号
            if((numerator<0) ^ (denominator<0)){
                res += "-";
            }
            
            //保证分子分母都为正数,防止取绝对值溢出,先将int转换为long,再取绝对值
            long num = numerator;
            long den = denominator;
            num = Math.abs(num);
            den = Math.abs(den);
            
            //得到结果的整数部分
            long numInt = num/den;
            res += String.valueOf(numInt);
            
            //判断是否能整除,如果能,则直接返回结果
            long number = (num%den)*10;
            if(number==0){
                return res;
            }
            
            //结果的小数部分:使用map记录每次操作之后的余数和对应的下标,HashMap的<key, value>分别对应<当前余数, 对应结果的下标>,当出现重复值的时候,可以通过对应下标寻找到重复部分。
            HashMap<Long, Integer> map = new HashMap<Long, Integer>();
            res += ".";
            while(number!=0){
                //判断map中是否出现过该余数,如果出现过则开始循环
                if(map.containsKey(number)){
                    int beg = map.get(number); //循环体开始的位置
                    String part1 = res.substring(0, beg);
                    String part2 = res.substring(beg, res.length());
                    res = part1 + "(" + part2 + ")";
                    return res;
                }
                
                //继续下除
                map.put(number, res.length());
                numInt = number / den;
                res += String.valueOf(numInt);
                number = (number%den) * 10;
            }
            
            return res;
        }
    }
    

    详见:https://www.cnblogs.com/grandyang/p/4238577.html

  • 相关阅读:
    增量+全量备份SVN服务器
    日常小命令集锦
    filebeat输出到kafka
    在Logstash的配置文件中对日志事件进行区分
    NFS服务器简易安装
    记录一次MySQL数据库CPU负载异常高的问题
    使用Spring的jdbcTemplate进一步简化JDBC操作
    Stream 和 byte[] 之间的转换
    C# 文件转byte数组,byte数组再转换文件
    groupbox里面添加Form
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8729385.html
Copyright © 2011-2022 走看看