leetcode-java-166. Fraction to Recurring Decimal

思路:
如何循环求数:每次都作除,然后取整数部分,余数*10
如何判断重复:当余数重复时,则就会是重复部分的出现,所以用hashmap存储余数(key)和索引位置,当余数(key)重复,则结束循环得到索引值方便加()
如何处理正负数:先判断符号,转换成正数
如何溢出处理:如果输入为Integer.MIN_VALUE,取绝对值后会溢出,则先转换成long

public class Solution {
     public String fractionToDecimal(int numerator, int denominator) {
         long quo = 0,
             res = 0;
         String result = "";

         // 特殊情况的处理
         if(numerator == 0) {
             return "0";
         }
         if(denominator == 0) {
             return "";
         }

         //若结果为负
         if((numerator > 0 && denominator < 0)||(numerator < 0 && denominator > 0)) {
             result += "-";
         }
         // 溢出处理并取正
         long num = numerator,
              deno = denominator;
         num = Math.abs(num);
         deno = Math.abs(deno);

         // 整数部分的处理
         quo = num / deno;
         res = (num % deno)*10;
         result += Long.toString(quo);
         if(res == 0) {
             return result;
         }

         // 小数部分的处理
         Map<Long,Integer> map = new HashMap<Long,Integer>();
         int index = 0;

         result += ".";
         while(res != 0) {
             if(map.containsKey(res)) {
                 index = map.get(res);
                 result = result.substring(0,index) + "(" + result.substring(index,result.length()) + ")";
                 return result;
             }
             map.put(res,result.length());
             quo = res / deno;
             result += Long.toString(quo);
             res = (res % deno)*10;
         }

         return result;
     }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值