在用C或者C++处理大数时感觉非常麻烦,但是在JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大.
这两个类都在java.math.*包中,因此每次必须在开头处引用该包。
1. 包含:import java.math.*;
2. 申请:
单个元素:BigInteger a, b; BigDecimal a, b;
数组:
BigInteger a[];
a = new BigInteger[1024];
BigDecimal a[];
a = new BigDecimal[1024];
3. 赋值:
a[1] = BigDecimal.valueOf(1);
a[1] = BigInteger.valueOf(1);
4. 加减乘除:
BigInteger a, b;
a = BigInteger.valueOf(1);
b = BigInteger.valueOf(2);
System.out.println(a.add(b));
System.out.println(a.subtract(b));
System.out.println(a.multiply(b));
System.out.println(a.divide(b));
BigDecimal a, b;
a = BigDecimal.valueOf(5);
b = BigDecimal.valueOf(3);
System.out.println(a.add(b));
System.out.println(a.subtract(b));
System.out.println(a.multiply(b));
System.out.println(a.divide(BigDecimal.valueOf(1)));
//这里要整除,否则会RE
System.out.println(a.divide(b, 4, 4));
//这里不太明白第3个参数是什么意思
System.out.println(a.divide(b, 4, BigDecimal.ROUND_HALF_UP));
//这里第二个参数是保留位数,第三个参数是进位方式。
5. 比较大小:
BigDecimal a, b;
a = BigDecimal.valueOf(5);
b = BigDecimal.valueOf(3);
if(a.compareTo(b) > 0)
System.out.println("a is greater than b");
else if(a.compareTo(b) == 0)
System.out.println("a is equal to b");
else if(a.compareTo(b) < 0)
System.out.println("a is lower than b");