• 166. Fraction to Recurring Decimal


    一、题目

      1、审题

      

      2、分析

        给出一个整数分子,一个整数分母。求商。若商为无限循环有理数,用括号包裹循环的小数。

    二、解答

      1、思路:

        ①、先确定商的符号;可以采用 ^ 运算符;

        ②、计算商的整数部分;

        ③、计算商的小数部分;同时用一个 Map 记录当前小数数值以及插入的下标,用于判断是否是循环有理小数,并根据下标的位置插入括号。

        public String fractionToDecimal(int numerator, int denominator) {
         
            if(numerator == 0)
                return "0";
            
            StringBuilder res = new StringBuilder();
            
            // "+" or "-", ^ :  1 ^ 0 = 1, 1^1 = 0^0 = 0
            res.append(((numerator > 0) ^ (denominator > 0)) ? "-" : "");
            long num = Math.abs((long)numerator);
            long den = Math.abs((long)denominator);    // 防止  -2147483648 溢出
    
            // Integer part
            res.append(num / den);
            num %= den;
            if(num == 0)
                return res.toString();
            
            // fractional part
            res.append(".");
            HashMap<Long, Integer> map = new HashMap<>();
            map.put(num, res.length());
            while(num != 0) {
                num *= 10;    // *
                res.append(num / den);
                num %= den;
                // 判断是否为无限循环小数
                if(map.containsKey(num)) {
                    int index = map.get(num);
                    res.insert(index, "(");
                    res.append(")");
                    break;
                }
                else {
                    map.put(num, res.length());
                }
            }
            return res.toString();                                                
        }
  • 相关阅读:
    数据结构
    ADC
    SPI
    定时器原理
    IO中断
    恩智浦样片申请
    UART
    随机生成数字验证码
    判断网络是否连接Internet
    清理SQL数据库日志
  • 原文地址:https://www.cnblogs.com/skillking/p/9794940.html
Copyright © 2020-2023  润新知