Java高精度确实A题利器,但是也需要掌握一定的技巧,尤其控制精度方面,由于大浮点数精度太高就默认用科学计数法表示,这里我们可以略施小计让其不用科学计数法表示并且去掉前导“0.”
stripTrailingZeros() :用于去除末尾多余的0
toPlainString(): 控制不使用科学计数法输出
去掉前导“0.”就相对简单多了,只需要先将高精度浮点数转化为字符串再判断字符串开头即可。
import java.io.BufferedInputStream;
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
BigDecimal a;
int b;
while(cin.hasNext()) {
a = cin.nextBigDecimal();
b = cin.nextInt();
BigDecimal ans = BigDecimal.ONE;
while(b != 0) {
if(b % 2 == 1) {
ans = ans.multiply(a);
}
a = a.multiply(a);
b >>= 1;
}
String str = ans.stripTrailingZeros().toPlainString();
if(str.startsWith("0.")) {
str = str.substring(1, str.length());
}
System.out.println(str);
}
}
}