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类型整数,超出范围数据有误 |
示例代码:
java@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)
java@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); }
java@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) | 除法运算 |
代码示例:
java@Test public void test1() { BigDecimal b1 = new BigDecimal("1") ; BigDecimal b2 = new BigDecimal("3") ; System.out.println(b1.divide(b2 , 2 , RoundingMode.UP)); }
java@Test public void test2() { BigDecimal b1 = new BigDecimal("1") ; BigDecimal b2 = new BigDecimal("3") ; System.out.println(b1.divide(b2 , 2 , RoundingMode.FLOOR)); }
java@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)); }