问题
将两个整数进行相除操作,如果是有限结果则正常返回显示,如果是无限循环小数那么找到循环节,将循环节用()括起来,返回一个字符串,举例1/3返回的结果是0.(3),可以使用除号
解决办法
- 将两个数相除得到结果,取余得到余数,如果余数为0那么表示整除了就将结果返回
- 余数不为0,那么声明一个商的list存储商结果,和一个余数list存储余数结果
- 将两个数相除得到结果存入商结果,取余得到余数
- 判断此时余数是否在余数结果中,如果存在那么表示找到循环体调出循环
- 如果不存在那么表示此时结果不是循环节,那么把余数存入余数结果中
- 将余数乘以10倍赋值给除数,然后进入步骤3继续执行
- 调出循环后,对结果进行组合,商List的第一个数是整数部分,然后添加.
- 再遍历取出商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();
}