问题
将两个整数进行相除操作, 如果是有限结果则正常返回显示, 如果是无限循环小数那么找到循环节, 将循环节用 () 括起来, 返回一个字符串, 举例 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();
- }
来源: http://www.jianshu.com/p/81344514be9c