《贰》算法竞赛常用的JAVA API--1 .大数类+2.Math类

145 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

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)