问题:
package main;
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
System.out.println(new Main().proc(11, 59));
System.out.println(new Main().proc(1, 3));
System.out.println(new Main().proc(22, 5));
System.out.println(new Main().proc(1, 7));
System.out.println(new Main().proc(3, 8));
System.out.println(new Main().proc(45, 56));
}
String proc(int N, int D){
ArrayList digits = new ArrayList<>();
ArrayList lefts = new ArrayList<>();
Integer Left = new Integer(N % D);
Integer Digit = new Integer(N / D);
lefts.add(Left);
digits.add(Digit);
int startLoop = -1;
int maxLoop = 100;
while (Left != 0 && maxLoop > 0){
maxLoop--;
Digit = Left * 10 / D;
Left = Left * 10 % D;
boolean isExitLoop = false;
for (int i=0; i
if (lefts.get(i) == Left){
startLoop = i + 1;
isExitLoop = true;
break;
}
}
digits.add(Digit);
lefts.add(Left);
if (isExitLoop){
if (digits.get(startLoop-1) == Digit){//循环小数有两种不同的模式,一种是从小数点后1位开始,第二种是非小数点后一位
startLoop--;
digits.remove(digits.size() - 1);
}
break;
}
}
StringBuffer sb = new StringBuffer();
if (digits.get(0) != 0){//商的整数部分>0
sb.append(digits.get(0));
}
if (digits.size() > 1){
sb.append('.');
}
for (int i=1; i
if (i == startLoop){
sb.append("(");
}
sb.append(digits.get(i));
}
if (startLoop > 0){
sb.append(")");
}
return sb.toString();
}
}