b_nk_a/b(map记录循环节初始时的位置)
求a/b的小数表现形式。如果a可以整除b则不需要小数点。如果是有限小数,则可以直接输出。如果是无限循环小数,则需要把小数循环的部分用"()"括起来。
void run() {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
final int a = sc.nextInt(), b = sc.nextInt();
int i = a / b;
int j = a % b;
StringBuilder ans = new StringBuilder();
ans.append(i);
if (j > 0) {
ans.append(".");
//map记录循环节的开始部分在ans中的位置,方便插入")"
Map<Integer, Integer> map = new HashMap<>();
while (j > 0) {
j *= 10;
//被除数再次出现就代表商出现循环节
if (map.containsKey(j)) {
ans.insert(map.get(j), "(");
ans.append(")");
break;
}
map.put(j, ans.length());
ans.append(j / b);
j %= b;
}
}
System.out.println(ans);
}