int, long 보다 더 큰 수를 저장하는 class
임의 정밀도로 정수를 나타낼 수 있는 클래스이다. 이 클래스는 정수의 크기에 제한을 받지 않기 때문에 매우 큰 정수를 다룰 수 있다.
일반적인 int나 long의 표현 범위를 넘어선 매우 큰 정수를 다룰 때 사용됩니다.
예를 들어, int의 표현 범위는 약 -2^31부터 2^31-1까지이고, long의 표현 범위는 약 -2^63부터 2^63-1까지이다. 이에 비해 BigInteger는 이러한 제한이 없어서 매우 큰 정수를 다룰 수 있다.
리스트처럼 값을 초기화해주는 과정이 필요하다.
import java.math.BigInteger;
import java.util.Collection;
import java.util.Scanner;
public class Main {
static BigInteger cache[][];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
cache = new BigInteger[n + 1][n + 1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= n; j++) {
cache[i][j] = BigInteger.ZERO;
}
}
System.out.println(Combination(n,k));
}
private static BigInteger Combination(int n, int k) {
if (n == k || k == 0) {
return cache[n][k] = BigInteger.valueOf(1);
}
if (cache[n][k].compareTo(BigInteger.ZERO) != 0) {
return cache[n][k];
}
return cache[n][k] = Combination(n - 1, k - 1).add(Combination(n - 1, k));
}
}