Java BigInteger类
java.math.BigInteger 类的使用场景是大整数操作。它提供类似所有Java的基本整数运算符和java.lang.Math中的所有相关的方法的操作,如+、-、*、/、%、&、|、mod、>>、<<,以及min()、max()等等。只不过它操作的整数都是极其大的,为科学计算提供了很大的便利。比如下面的代码就是计算20000000000000000000 * 30000000000000000000,利用BigInteger可以很容易的计算出来结果。
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String a = in.nextLine();
String b = in.nextLine();
BigInteger biga = new BigInteger(a);
BigInteger bigb = new BigInteger(b);
BigInteger result = biga.multiply(bigb);
System.out.println(result);
}
}
//输入
30000000000000000000
20000000000000000000
//输出
600000000000000000000000000000000000000
使用方法
1.赋值:
BigInteger a=new BigInteger("1231");
2.运算:
① add(); 大整数相加
BigInteger a=new BigInteger(“23”);
BigInteger b=new BigInteger(“34”);
BigInteger ans = a. add(b);
②subtract(); 相减
③multiply(); 相乘
④divide(); 相除取整
⑤remainder(); 取余
⑥pow(); a.pow(b)=a^b
⑦gcd(); 最大公约数
⑧abs(); 绝对值
⑨negate(); 取反数
⑩mod(); a.mod(b)=a%b=a.remainder(b);
例题:大菲波数 HDU - 1715
Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项Fibonacci数值。
因为n很大, 的出来的 f(n) 结果会爆long long , 只能用大数来做。
代码:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
int n = scanner.nextInt();
BigInteger[] fabs = new BigInteger[1000];
fabs[0] = new BigInteger("1");
fabs[1] = new BigInteger("1");
for (int i = 2; i < 1000; i++) {
fabs[i] = fabs[i - 1].add(fabs[i - 2]);
}
while (n-- > 0) {
System.out.println(fabs[scanner.nextInt() - 1]);
}
}
}
}