解题思路:
float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,计算往往要求结果精确,这时候BigDecimal就派上大用场啦。
注意事项:
//加法public BigDecimal add(BigDecimal value);
//减法 public BigDecimal subtract(BigDecimal value);
//乘法public BigDecimal multiply(BigDecimal value);
//除法public BigDecimal divide(BigDecimal value);
减乘除其实最终都返回的是一个新的BigDecimal对象,因为BigInteger与BigDecimal都是不可变的(immutable)的
,在进行每一步运算时,都会产生一个新的对象
参考代码:
import java.math.BigDecimal;
import java.util.Scanner;
//(1)商业计算使用BigDecimal。
//
//(2)尽量使用参数类型为String的构造函数。
//
//(3) BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(fun(sc.nextBigDecimal()));
}
private static BigDecimal fun(BigDecimal a) {
BigDecimal b = new BigDecimal(1);
BigDecimal ans = new BigDecimal(1);
while (a.compareTo(b) > 0) {
ans = ans.multiply(a);
a = a.subtract(b);
}
return ans;
}
}
0.0分
0 人评分