当前位置:   article > 正文

【蓝桥杯】Java组必备API类 --高精大数类 BigInteger BigDecimal总结_蓝桥杯java对于大数来说究竟开什么类型比较好

蓝桥杯java对于大数来说究竟开什么类型比较好

在这里插入图片描述

大数类

大数类一共有两个,分别是BigInteger和BigDecimal,大数整形变量以及大数浮点数,理论上可以存储无线长的数字(只要你计算机的内存足够),接下来我将会分别介绍这两个类。

BigInteger
构造函数

BigInteger一共有六个构造方法,分别是以下六个,个人认为最常用的应该是第五个将字符串转换为BigInteger。

BigInteger b = BigInteger(byte[] val) 
//将包含BigInteger的二进制补码二进制表达式的字节数组转换为BigInteger。  
BigInteger b = BigInteger(int signum, byte[] magnitude) 
//将BigInteger的符号大小表示形式转换为BigInteger。  
BigInteger b = BigInteger(int bitLength, int certainty, Random rnd) 
//构造一个随机生成的正BigInteger,它可能是素数,具有指定的bitLength。  
BigInteger b = BigInteger(int numBits, Random rnd) 
//构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内。  
BigInteger b = BigInteger(String val) 
//将BigInteger的十进制字符串表示形式转换为BigInteger。  
BigInteger b = BigInteger(String val, int radix) 
//将指定基数中的BigInteger的String表示形式转换为BigInteger。  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
输入

BigInteger类是可以直接读入的,当然你也可以选择先读入字符串然后再转到BigInteger。

Scanner s = new Scanner(System.in);
while (sc.hasNextBigInteger()) {
BigInteger b = s.nextBigInteger();  //读取BigInteger
  • 1
  • 2
  • 3
输出

BigInteger类是可以直接输出的

System.out.println(b);
  • 1
四则运算

BigInteger的四则运算不能用基础的四个符号进行操作,而是需要用BigInteger的方法来实现。

BigInteger b1 = new BigInteger("1000000");
BigInteger b2 = new BigInteger("-2000000");
System.out.println(b2.add(b1));  //加
System.out.println(b2.subtract(b1));  //减
System.out.println(b2.multiply(b1));   //乘
System.out.println(b2.divide(b1));   //除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
其他运算
System.out.println(b2.remainder(b1));   //取余
System.out.println(b2.negate());   //取负号
System.out.println(b2.equals(b1));   //判断相等
System.out.println(b2.gcd(b1));   //求最大公约数
System.out.println(b2.max(b1));   //求最大值
System.out.println(b2.min(b1));   //求最小值
System.out.println(b2.pow(100000));   //开方
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
位运算
System.out.println(b2.and(b1));   //并
System.out.println(b2.not());    //取反
System.out.println(b2.or(b1));   //或
System.out.println(b2.xor(b1));   //异或
  • 1
  • 2
  • 3
  • 4
方法

BigInteger 的方法如下所示(注意不是静态方法)

BigInteger abs() 
//返回一个BigInteger,它的值是此BigInteger的绝对值。  
BigInteger add(BigInteger val) 
//返回值为 (this + val) 。  
BigInteger and(BigInteger val) 
//返回值为 (this & val) 。  
BigInteger andNot(BigInteger val) 
//返回值为 (this & ~val) 。  
int bitCount() 
//返回与其符号位不同的BigInteger的二进制补码表示中的位数。  
int bitLength() 
//返回此BigInteger的最小二进制补码表示中的位数, 不包括符号位。  
byte byteValueExact() 
//将此 BigInteger转换为 byte ,检查丢失的信息。  
BigInteger clearBit(int n) 
//返回一个BigInteger,其值等于此BigInteger,指定的位被清零。  
int compareTo(BigInteger val) 
//将此BigInteger与指定的BigInteger进行比较。  
BigInteger divide(BigInteger val) 
//返回值为 (this / val) 。  
BigInteger[] divideAndRemainder(BigInteger val) 
//返回两个BigInteger的数组,其中包含 (this / val)后跟 (this % val) 。  
double doubleValue() 
//将此BigInteger转换为 double 。  
boolean equals(Object x) 
//将此BigInteger与指定的对象进行比较以实现相等。  
BigInteger flipBit(int n) 
//返回一个BigInteger,其值等于此BigInteger,指定的位被翻转。  
float floatValue() 
//将此BigInteger转换为 float 。  
BigInteger gcd(BigInteger val) 
//返回一个BigInteger,其值是 abs(this)和 abs(val) 。  
int getLowestSetBit() 
//返回此BigInteger中最右(最低位)一位的索引(最右边一位右侧的零位数)。  
int hashCode() 
//返回此BigInteger的哈希码。  
int intValue() 
//将此BigInteger转换为 int 。  
int intValueExact() 
//将此 BigInteger转换为 int ,检查丢失的信息。  
boolean isProbablePrime(int certainty) 
//返回 true如果这个BigInteger可能是素数, false如果它是绝对复合。  
long longValue() 
//将此BigInteger转换为 long 。  
long longValueExact() 
//将此 BigInteger转换为 long ,检查丢失的信息。  
BigInteger max(BigInteger val) 
//返回此BigInteger和 val 。  
BigInteger min(BigInteger val) 
//返回此BigInteger和 val 。  
BigInteger mod(BigInteger m) 
//返回值为 (this mod m )。  
BigInteger modInverse(BigInteger m) 
//返回值为 (this -1 mod m) 。  
BigInteger modPow(BigInteger exponent, BigInteger m) 
//返回值为 (thisexponent mod m)的BigInteger 。  
BigInteger multiply(BigInteger val) 
//返回值为 (this * val) 。  
BigInteger negate() 
//返回值为 (-this) 。  
BigInteger nextProbablePrime() 
//返回大于这个 BigInteger为 BigInteger的第一个整数。  
BigInteger not() 
//返回值为 (~this) 。  
BigInteger or(BigInteger val) 
//返回值为 (this | val) 。  
BigInteger pow(int exponent) 
//返回值为 (thisexponent)的BigInteger 。  
static BigInteger probablePrime(int bitLength, Random rnd) 
//返回一个正的BigInteger,它可能是素数,具有指定的位长度。  
BigInteger remainder(BigInteger val) 
//返回值为 (this % val) 。  
BigInteger setBit(int n) 
//返回一个BigInteger,其值等于具有指定位集合的BigInteger。  
BigInteger shiftLeft(int n) 
//返回值为 (this << n) 。  
BigInteger shiftRight(int n) 
//返回值为 (this >> n) 。  
short shortValueExact() 
//将此 BigInteger转换为 short ,检查丢失的信息。  
int signum() 
//返回此BigInteger的signum函数。  
BigInteger subtract(BigInteger val) 
//返回值为 (this - val) 。  
boolean testBit(int n) 
//返回 true当且仅当指定的位被设置。  
byte[] toByteArray() 
//返回一个包含此BigInteger的二进制补码表示的字节数组。  
String toString() 
//返回此BigInteger的十进制字符串表示形式。  
String toString(int radix) 
//返回给定基数中BigInteger的String表示形式。  
static BigInteger valueOf(long val) 
//返回一个BigInteger,其值等于指定的 long 。  
BigInteger xor(BigInteger val) 
//返回值为 (this ^ val) 。  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
BigDecimal
构造函数

BigDecimal一共有十六个构造方法,分别是以下十六个,同样最常用的方法我认为还是传入字符串

BigDecimal(BigInteger val) 
//将 BigInteger转换成 BigDecimal 。  
BigDecimal(BigInteger unscaledVal, int scale) 
//将BigInteger的 BigInteger值和 int等级转换为 BigDecimal 。  
BigDecimal(BigInteger unscaledVal, int scale, MathContext mc) 
//将 BigInteger未缩放值和 int扩展转换为 BigDecimal ,根据上下文设置进行舍入。  
BigDecimal(BigInteger val, MathContext mc) 
//根据上下文设置将 BigInteger转换为 BigDecimal舍入。  
BigDecimal(char[] in) 
//一个转换的字符数组表示 BigDecimal成 BigDecimal ,接受字符作为的相同序列 BigDecimal(String)构造。  
BigDecimal(char[] in, int offset, int len) 
//一个转换的字符数组表示 BigDecimal成 BigDecimal ,接受字符作为的相同序列 BigDecimal(String)构造,同时允许一个子阵列被指定。  
BigDecimal(char[] in, int offset, int len, MathContext mc) 
//一个转换的字符数组表示 BigDecimal成 BigDecimal ,接受字符作为的相同序列 BigDecimal(String)构造,同时允许指定一个子阵列和用根据上下文设置进行舍入。  
BigDecimal(char[] in, MathContext mc) 
//一个转换的字符数组表示 BigDecimal成 BigDecimal ,接受相同的字符序列作为 BigDecimal(String)构造与根据上下文设置进行舍入。 
BigDecimal(double val) 
//将 double转换为 BigDecimal ,这是 double的二进制浮点值的精确十进制表示。  
BigDecimal(double val, MathContext mc) 
//将 double转换为 BigDecimal ,根据上下文设置进行舍入。  
BigDecimal(int val) 
//将 int成 BigDecimal 。  
BigDecimal(int val, MathContext mc) 
//将 int转换为 BigDecimal ,根据上下文设置进行舍入。  
BigDecimal(long val) 
//将 long成 BigDecimal 。  
BigDecimal(long val, MathContext mc) 
//将 long转换为 BigDecimal ,根据上下文设置进行舍入。  
BigDecimal(String val) 
//将BigDecimal的字符串表示 BigDecimal转换为 BigDecimal 。  
BigDecimal(String val, MathContext mc) 
//一个转换的字符串表示 BigDecimal成 BigDecimal ,接受相同的字符串作为 BigDecimal(String)构造,利用根据上下文设置进行舍入。 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

注意:

上面的那些是我从JavaAPI上面得来的,但是以下这一点一定要注意!

最好使用String来传参构造,而不用double,原因如下

请看下列代码

BigDecimal b1 =new BigDecimal(0.1);
System.out.println(b1);
BigDecimal b2 =new BigDecimal("0.1");
System.out.println(b2);
  • 1
  • 2
  • 3
  • 4

最后的结果为:

在这里插入图片描述

为什么会这样呢?

double构造的结果具有一定的不可预知性,因为由于二进制的原因0.1并没有办法很好的表示,二传入String的构造结果是完全可信的,也就是会正好的得到想要的0.1,所以我们构造BigDecimal的值时最好使用String来构造。

输入

BigDecimal类是可以直接读入的,当然你也可以选择先读入字符串然后再转到BigDecimal。

Scanner s = new Scanner(System.in);
while (sc.hasNextBigDecimal()) {
	BigDecimal b = s.nextBigDecimal();  //读取BigInteger
}
  • 1
  • 2
  • 3
  • 4
输出

BigDecimalr类是可以直接输出的

System.out.println(b);
  • 1
四则运算

BigDecimal的四则运算不能用基础的四个符号进行操作,而是需要用BigDecimal的方法来实现。

BigDecimal b1 =new BigDecimal(0.1);
BigDecimal b2 =new BigDecimal("0.2");
System.out.println(b2.add(b1));  //加
System.out.println(b2.subtract(b1));  //减
System.out.println(b2.multiply(b1));   //乘
System.out.println(b2.divide(b1));   //除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
其他运算
System.out.println(b2.remainder(b1));   //取余
System.out.println(b2.negate());   //取负号
System.out.println(b2.equals(b1));   //判断相等
System.out.println(b2.compareTo(b1));  //比大小(比得过是1,相等是0,比不过是-1)
System.out.println(b2.gcd(b1));   //求最大公约数
System.out.println(b2.max(b1));   //求最大值
System.out.println(b2.min(b1));   //求最小值
System.out.println(b2.pow(100000));   //开方
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
方法

BigDecimal的方法如下所示(注意不是静态方法)

BigDecimal abs() 
//返回一个 BigDecimal ,其值为此 BigDecimal的绝对值,其缩放比例为 this.scale() 。  
BigDecimal abs(MathContext mc) 
//返回一个 BigDecimal ,其值为此 BigDecimal的绝对值,根据上下文设置进行舍入。  
BigDecimal add(BigDecimal augend) 
//返回 BigDecimal ,其值是 (this + augend) ,其标为 max(this.scale(), augend.scale()) 。  
BigDecimal add(BigDecimal augend, MathContext mc) 
//返回 BigDecimal ,其值是 (this + augend) ,根据上下文设置进行舍入。  
byte byteValueExact() 
//将此 BigDecimal转换为 byte ,检查丢失的信息。  
int compareTo(BigDecimal val) 
//将此 BigDecimal与指定的BigDecimal进行 BigDecimal 。  
BigDecimal divide(BigDecimal divisor) 
//返回BigDecimal ,其值为(this / divisor) ,优先级为(this.scale() - divisor.scale()) ; 如果不能表示确切的商(因为它具有非终止的十进制扩展),则抛出一个ArithmeticException 。  
BigDecimal divide(BigDecimal divisor, int roundingMode) 
//返回 BigDecimal ,其值是 (this / divisor) ,其标为 this.scale() 。  
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 
//返回一个 BigDecimal ,其值为 (this / divisor) ,其比例为指定。  
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode) 
//返回一个 BigDecimal ,其值为 (this / divisor) ,其比例为指定。  
BigDecimal divide(BigDecimal divisor, MathContext mc) 
//返回 BigDecimal ,其值是 (this / divisor) ,根据上下文设置进行舍入。  
BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode) 
//返回 BigDecimal ,其值是 (this / divisor) ,其标为 this.scale() 。  
BigDecimal[] divideAndRemainder(BigDecimal divisor) 
//返回一个两元件 BigDecimal阵列含有的结果 divideToIntegralValue接着的结果 remainder上的两个操作数。  
BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc) 
//返回一个两元件 BigDecimal阵列含有的结果 divideToIntegralValue接着的结果 remainder上与根据上下文设置进行舍入计算出的两个操作数。  
BigDecimal divideToIntegralValue(BigDecimal divisor) 
//返回一个 BigDecimal ,它的值是 BigDecimal的整数部分 (this / divisor)取整。  
BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc) 
//返回值为 BigDecimal的整数部分的 (this / divisor) 。  
double doubleValue() 
//将此 BigDecimal转换为 double 。  
boolean equals(Object x) 
//将此 BigDecimal与指定的 Object进行比较以获得相等性。  
float floatValue() 
//将此 BigDecimal转换为 float 。  
int hashCode() 
//返回此 BigDecimal的哈希码。  
int intValue() 
//将此 BigDecimal转换为 int 。  
int intValueExact() 
//将此 BigDecimal转换为 int ,检查丢失的信息。  
long longValue() 
//将此 BigDecimal转换为 long 。  
long longValueExact() 
//将此 BigDecimal转换为 long ,检查丢失的信息。  
BigDecimal max(BigDecimal val) 
//返回此 BigDecimal和 val 。  
BigDecimal min(BigDecimal val) 
//返回此 BigDecimal和 val 。  
BigDecimal movePointLeft(int n) 
//返回一个 BigDecimal ,相当于这个小数点,向左移动了 n个地方。  
BigDecimal movePointRight(int n) 
//返回一个 BigDecimal ,相当于这个小数点移动了 n个地方。  
BigDecimal multiply(BigDecimal multiplicand) 
//返回 BigDecimal ,其值是 (this × multiplicand),其标为 (this.scale() + multiplicand.scale()) 。  
BigDecimal multiply(BigDecimal multiplicand, MathContext mc) 
//返回 BigDecimal ,其值是 (this × multiplicand),根据上下文设置进行舍入。  
BigDecimal negate() 
//返回 BigDecimal ,其值是 (-this) ,其标为 this.scale() 。  
BigDecimal negate(MathContext mc) 
//返回 BigDecimal ,其值是 (-this) ,根据上下文设置进行舍入。  
BigDecimal plus() 
//返回 BigDecimal ,其值是 (+this) ,其标为 this.scale() 。  
BigDecimal plus(MathContext mc) 
//返回 BigDecimal ,其值是 (+this) ,根据上下文设置进行舍入。  
BigDecimal pow(int n) 
//返回 BigDecimal ,其值是 (thisn),该电源,准确计算,使其具有无限精度。  
BigDecimal pow(int n, MathContext mc) 
//返回 BigDecimal ,其值是 (thisn)。  
int precision() 
//返回此 BigDecimal的 BigDecimal 。  
BigDecimal remainder(BigDecimal divisor) 
//返回 BigDecimal ,其值是 (this % divisor) 。  
BigDecimal remainder(BigDecimal divisor, MathContext mc) 
//返回 BigDecimal ,其值是 (this % divisor) ,根据上下文设置进行舍入。  
BigDecimal round(MathContext mc) 
//返回 BigDecimal根据四舍五入 MathContext设置。  
int scale() 
//返回此 规模 BigDecimal 。  
BigDecimal scaleByPowerOfTen(int n) 
//返回一个BigDecimal,其数值等于( this * 10 n )。  
BigDecimal setScale(int newScale) 
//返回一个 BigDecimal ,其大小是指定值,其值在数字上等于此 BigDecimal 。  
BigDecimal setScale(int newScale, int roundingMode) 
//返回一个 BigDecimal ,其规模是指定值,其缩放值通过将此 BigDecimal的非标度值乘以10的适当功率来确定,以维持其总体值。  
BigDecimal setScale(int newScale, RoundingMode roundingMode) 
//返回一个 BigDecimal ,其规模是指定值,其缩放值通过将该 BigDecimal的非标度值乘以10的适当功率来确定,以维持其整体值。  
short shortValueExact() 
//将此 BigDecimal转换为 short ,检查丢失的信息。  
int signum() 
//返回这个 BigDecimal的signum函数。  
BigDecimal stripTrailingZeros() 
//返回一个 BigDecimal ,它在数字上等于此值, BigDecimal表示中删除任何尾随的零。  
BigDecimal subtract(BigDecimal subtrahend) 
//返回 BigDecimal ,其值是 (this - subtrahend) ,其标为 max(this.scale(), subtrahend.scale()) 。  
BigDecimal subtract(BigDecimal subtrahend, MathContext mc) 
//返回 BigDecimal ,其值是 (this - subtrahend) ,根据上下文设置进行舍入。  
BigInteger toBigInteger() 
//将此 BigDecimal转换为 BigInteger 。  
BigInteger toBigIntegerExact() 
//将此 BigDecimal转换为 BigInteger ,检查丢失的信息。  
String toEngineeringString() 
//如果需要指数,则使用工程符号返回此 BigDecimal的字符串表示形式。  
String toPlainString() 
//返回没有指数字段的此 BigDecimal的字符串表示形式。  
String toString() 
//返回此 BigDecimal的字符串表示,如果需要指数,则使用科学计数法。  
BigDecimal ulp() 
//返回此 BigDecimal的最后一个位置的ulp(一个单位)的大小。  
BigInteger unscaledValue() 
//返回一个 BigInteger ,其值是此 BigDecimal的 未缩放值 。  
static BigDecimal valueOf(double val) 
//转换一个 double成 BigDecimal ,使用 double通过所提供的规范的字符串表示 Double.toString(double)方法。  
static BigDecimal valueOf(long val) 
//将 long值转换为 BigDecimal ,比例为零。  
static BigDecimal valueOf(long unscaledVal, int scale) 
//将 long值和 int比例转换为 BigDecimal 。  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/481107
推荐阅读
相关标签
  

闽ICP备14008679号