• 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

  • 相关阅读:
    Oracle游标举例
    java程序写的模拟用户点击的程序(抢小米程序)
    最好的ASP.NET MVC入门 step by step 来自微软
    项目经理
    程序员的职场晋升之路
    程序员怎么样才能进入微软?
    浅谈程序员创业
    软件销售心得-送给自己卖软件的程序员
    lamda表达式,匿名函数
    为什么Flash没能在移动设备上挺住?
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8729385.html
Copyright © 2020-2023  润新知