zoukankan      html  css  js  c++  java
  • 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();                                                
        }
  • 相关阅读:
    HTML 基本知识
    Vue.js 基本内容
    机器学习概述
    9 验证回文串
    c 字符串的一些常用函数
    8 有效的字母异位词
    7 字符串中的第一个唯一字符
    对公平锁、非公平锁、可重入锁、递归锁、自旋锁的理解
    一个解释volatile关键字最好的例子
    Singleton多种实现方式的在多线程情况下的优缺点
  • 原文地址:https://www.cnblogs.com/skillking/p/9794940.html
Copyright © 2011-2022 走看看