求两个整数相除的结果(循环节)

问题

将两个整数进行相除操作,如果是有限结果则正常返回显示,如果是无限循环小数那么找到循环节,将循环节用()括起来,返回一个字符串,举例1/3返回的结果是0.(3),可以使用除号

解决办法

  1. 将两个数相除得到结果,取余得到余数,如果余数为0那么表示整除了就将结果返回
  2. 余数不为0,那么声明一个商的list存储商结果,和一个余数list存储余数结果
  3. 将两个数相除得到结果存入商结果,取余得到余数
  4. 判断此时余数是否在余数结果中,如果存在那么表示找到循环体调出循环
  5. 如果不存在那么表示此时结果不是循环节,那么把余数存入余数结果中
  6. 将余数乘以10倍赋值给除数,然后进入步骤3继续执行
  7. 调出循环后,对结果进行组合,商List的第一个数是整数部分,然后添加.
  8. 再遍历取出商list中的数据,其中需要注意有无循环节,有循环节的部分需要在循环节之前加入小括号,最后再加入大括号,因此需要记录循环节的位置,循环节位置有list.index函数找寻

源代码

public static String divide(int dividend, int divisor) {
        if (dividend<0||divisor<0) return "";
        if (dividend % divisor == 0) {
            int result = dividend / divisor;
            return String.valueOf(result);
        }
        List<Integer> quotientList = new ArrayList<>();
        List<Integer> remainList = new ArrayList<>();
        int position = -1;
        while (true) {
            quotientList.add(dividend/divisor);
            int remain = dividend % divisor;
            if (remain==0) break;
            position = remainList.indexOf(remain);
            if (position>=0) break;
            else {
                remainList.add(remain);
            }
            dividend = remain*10;
        }
        StringBuilder sb = new StringBuilder();
        sb.append(quotientList.get(0));
        sb.append(".");
        for (int i=1; i<quotientList.size(); i++) {
            if (i==position+1) sb.append("(");
            sb.append(quotientList.get(i));
        }
        if (position>=0) sb.append(")");
        return sb.toString();
    }

推荐阅读更多精彩内容