本文已参与「新人创作礼」活动,一起开启掘金创作之路
1 、大数类
java中的基础数据类型能存储的最大的二进制数是 2 ^ 63 - 1, 对应的十进制数是9223372036854775807,也就是说只要运算过程中会超过这个数,就会造成数据溢出,从而造成错误.
而java.math.*包中提供了大数类,其理论上可以存储无限位的大数,只要内存足够的话。 大数类又分为整数和浮点数.即BigInteger and BigDecimal 大数类的对象不能直接进行运算,需要调用类中相应的方法,并且方法的参数必须和调用的类相同,BigInteger不能调用BigDecimal, 不能作为其方法参数, 即整数和浮点数不能混合运算. 本文举例了一些常用的方法,不需要背会,需要用的时候查java API就行了。
BigInteger 和BigDecimal
1.创建
(1) 直接声明 BigInteger a;BigDecimal
(2) 使用构造函数初始化 BigInteger a = new BigInteger("12"); BigDecimal b = new BigDecimal("123.3")
2.赋值
(1)BigInteger.valueOf(long val) BigDecimal.valueOf(double val)
val不能超过long类型的最大取值9e18,超过int要在数后加L
(2)使用 “=” 赋值给同类型的变量
3.运算
加 add
减 subtract
乘 multiply
除 divide
取余 mod
求最大公因数 gcd
求最值 max , min
a * b mod c : a.modPow(b,c)
比较大小 comparaTo
进制转化 使用构造函数BigInteger(String,int index)可以把index进制的字符串转化为10进制的BigInteger
类型转换 BigInteger.toBigDecimal
保留n位小数
setScale(int new Scale, RoundingMode roundingMode)
其中常用的有四舍五入 BigDecimal.ROUND_HALF_UP 和 向零舍入 ROUND_DOWN、
2、算法竞赛中的常用JAVA API :Math类
Math类包含了一些常用的数学方法, 在java.lang.*包里
求最值 Math.max Math.min
求平方根 Math.sqrt()
求绝对值 Math.abs()
求幂 Math.pow()
取整 向上取整 ceil(double) 向下取整 floor(double) 四舍五入取整Math.round(double)
三角函数 Math.sin cos tan 反三角函数 asin acos atan
可以通过反三角函数求出π的值 Math.acos(-1)