zoukankan      html  css  js  c++  java
  • [leetcode72]166. Fraction to Recurring Decimal手动实现除法

    让人火大的一道题,特殊情况很多

    不过也学到了:

    java中int类型的最大值的绝对值比最小值的绝对值小1

    int最小值的绝对值还是负的,除以-1也是

    这种时候最好转为long类型进行处理

    long num = (long)numerator;
            long den = (long)denominator;
            //两种特殊情况,一种是分母为0,一种是可以直接处尽
            if (den==0)
                return "";
            if (num%den==0)
                return num/den+"";
            //记录结果
            StringBuilder res = new StringBuilder();
            //判断商是负数的情况,在结果前边添加负号
            if ((num<0&&den>0)||(num>0&&den<0))
                res.append("-");
            //全部化成正数,不然会每位都有负号
             num = Math.abs(num);
             den = Math.abs(den);
            //添加上整数部分和.
            res.append(num/den+".");
            //记录当前余数
            long temp = num%den;
            //记录每次分子对应的那一位结果的index和用来判断是否开始循环
            Map<Long,Integer> map = new HashMap<>();
            int sta = res.length();
            while (temp!=0)
            {
                //如果开始循环,跳出
                if (map.containsKey(temp))
                    break;
                //如果不是循环,那就记录位置
                map.put(temp,sta);
                //记录此次相除的结果
                res.append(temp*10/den);
                //更新余数
                temp= (((long)(temp*10))%den);
                //位置前移
                sta++;
            }
            //有两种情况会跳出循环,一种是没有余数了,直接返回,一种是商是循环小数
            if (temp==0)
                return new String(res);
            //查询开始循环的位置
            int left = map.get(temp);
            res.insert(left,"(");
            res.append(")");
            return new String(res);
  • 相关阅读:
    开门大吉效果
    Python3-sqlalchemy-orm 创建关联表带外键并插入数据
    Python3-sqlalchemy-orm 联表查询-无外键关系
    Python3-sqlalchemy-orm 分组统计
    Python3-sqlalchemy-orm 回滚
    Python3-sqlalchemy-orm 查询、修改
    Python3-sqlalchemy-orm
    MySQL 5.6的一个bug引发的故障
    MySQL GTID你知多少
    MySQL Cluster 日常维护
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8305659.html
Copyright © 2011-2022 走看看