昨天下午的训练中有一道签到题但是需要用到高精度,队里的三个人都不会高精度,没有办法我只好现场学习Java的大整数用法。训练之后打算对Java的大整数应用进行一个总结,以提升自己的Java应用水平。
1 介绍
Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类这两个类都在Java.math.*中,每次使用都需要在开头处调用这个包。
2 用法
构造
BigInteger
1 | BigInteger(byte[] val) |
将包含 BigInteger 的二进制补码表示形式的 byte 数组转换为 BigInteger,用字节数组中值的ASCII码构造BigInteger。
1 | BigInteger(int signum, byte[] magnitude) |
将 BigInteger 的符号-数量表示形式转换为 BigInteger,signum取值可以为1,0,-1。
1 | BigInteger(String val) |
将十进制的字符串转化为BigInteger
1 | BigInteger(String val, int radix) |
将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。
1 | BigInteger(int bitLength, int certainty, Random rnd) |
可以构造一个指定长度的且有一定的概率为素数的BigInteger。
bitLength为返回的BigInteger的二进制长度。
certainty为调用方允许的不确定性的度量。新的 BigInteger 表示素数的概率超出 (1 - 1/2certainty)。此构造方法的执行时间与此参数的值是成比例的。
rnd为当前随机的比特源。
1 | BigInteger(int numBits, Random rnd) |
用于生成一个范围在$[0,2^{numBits}-1)$的随机BigInteger。
BigDecimal
1 | BigDecimal(int val) |
用一个int类型的变量构造一个BigInteger。
1 | BigDecimal(long val) |
用一个long类型的变量构造一个BigInteger。
1 | BigDecimal(double val) |
用一个double类型的变量构造一个BigInteger。这个构造函数的结果可能有些不可预测,比如我们用new BigDicimal(0.1)构造一个BigDicimal,其值实际为0.1000000000000000055511151231257827021181583404541015625。
1 | BigDecimal(String val) |
用字符串类型的十进制浮点数构造BigDecimal。
1 | BigDecimal(BigInteger val) |
用BigInteger构造BigDemical。
1 | BigDecimal(BigInteger unscaledVal, int scale) |
构造的值为$unscaledVal*10^{-scale}$
常见函数
BigInteger
1 | BigInteger add(BigInteger val); // 返回当前BigInteger与val的和 |
BigDecimal
1 | BigDecimal valueOf(parament val) // 将特定的参数类型转换为BigDemical |