BigInteger
BigInteger构造方法
public BigInteger(int num, Random rnd)
获取随机大整数,范围:[0 ~ 2的num次方-1]
public BigInteger(String val)
获取指定的大整数
public BigInteger(String val, int radix)
获取指定进制的大整数
构造方法小结:
1、如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取。
2、如果BigInteger表示的超出long的范围,可以用构造方法获取。
3、对象一旦创建,BigInteger内部记录的值不能发生改变。
4、只要进行计算都会产生一个新的BigInteger对象
BigInteger静态方法
public static BigInteger valueOf(long val) 静态方法获取BigInteger的对象,内部有优化,范围[-16 ~ 16]。
BigInteger常用成员方法
public BigInteger add(BigInteger val) 加法 public BigInteger subtract(BigInteger val) 减法 public BigInteger multiply(BigInteger val) 乘法 public BigInteger divide(BigInteger val) 除法 public BigInteger[] divideAndRemainder(BigInteger val) 除法,获取商和余数 public boolean equals(Object x) 比较是否相同 public BigInteger pow(int exponent) 次幂、次方 public BigInteger max/min(BigInteger val) 返回较大值/较小值 public int intValue(BigInteger val) 转为int类型整数,超出范围数据有误
示例代码:
@Test public void bigInteger() { BigInteger gz = new BigInteger("5325252523663464364436436346"); //1.创建两个BigInteger对象 BigInteger bd1 = BigInteger.valueOf(10); BigInteger bd2 = BigInteger.valueOf(5); //2.加法 BigInteger bd3 = bd1.add(bd2); System.out.println(bd3); //3.除法,获取商和余数 BigInteger[] arr = bd1.divideAndRemainder(bd2); System.out.println(arr[0]); System.out.println(arr[1]); //4.比较是否相同 boolean result = bd1.equals(bd2); System.out.println(result); //5.次幂 BigInteger bd4 = bd1.pow(2); System.out.println(bd4); //6.max BigInteger bd5 = bd1.max(bd2); //7.转为int类型整数,超出范围数据有误 /* BigInteger bd6 = BigInteger.valueOf(2147483647L); int i = bd6.intValue(); System.out.println(i); */ BigInteger bd6 = BigInteger.valueOf(200); double v = bd6.doubleValue(); System.out.println(v);//200.0 }
运行结果:
BigInteger实现高精度计算出 S=1!+2!+3!+⋯+n!(≤50)
@Test public void test() { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); BigInteger ans = new BigInteger("0"); for (int i = n; i > 0; i--) { BigInteger res = new BigInteger("1"); for(int j = i; j > 0; j--) { res = res.multiply(BigInteger.valueOf(j)); } ans = ans.add(res); } System.out.println(ans); }
@Test public void test() { BigInteger days = new BigInteger(String.valueOf(20)); for (int i = 1; i < 22; i ++ ) { days = days.multiply(BigInteger.valueOf(20)); } System.out.println(days.mod(BigInteger.valueOf(7))); //算出20^22的结果后,再mod上7,然后再加上6就是我们的答案,因为是从星期6开始枚举的。 }
BigDecimal
BigInteger构造方法
public BigDecimal(int val) public BigDecimal(long val) public BiDecimal(double val) 具有不可预知性,可能丢失精度,不建议使用 public BigDecimal(String val) 常用
BigInteger静态方法
public static BigDecimal valueOf(double val) 底层是new BigDecimal(String str) 没有超出double范围建议使用静态方法,超出double范围建议使用构造方法 public static BigDecimal valueOf(long val) 内部有优化[0 ~ 10]的整数!!!
BigInteger常用成员方法
public BigDecimal add(BigDecimal value) 加法运算 public BigDecimal subtract(BigDecimal value) 减法运算 public BigDecimal multiply(BigDecimal value) 乘法运算 public BigDecimal divide(BigDecimal value) 除法运算
代码示例:
@Test public void test1() { BigDecimal b1 = new BigDecimal("1") ; BigDecimal b2 = new BigDecimal("3") ; System.out.println(b1.divide(b2 , 2 , RoundingMode.UP)); }
@Test public void test2() { BigDecimal b1 = new BigDecimal("1") ; BigDecimal b2 = new BigDecimal("3") ; System.out.println(b1.divide(b2 , 2 , RoundingMode.FLOOR)); }
@Test public void test3() { BigDecimal b1 = new BigDecimal("0.3") ; BigDecimal b2 = new BigDecimal("4") ; System.out.println(b1.divide(b2 , 2 , RoundingMode.HALF_UP)); }