解题思路:
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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复