매우 큰 숫자를 의미하는 것
int의 표현 범위
- -2^31 ~ 2^31 -1
long의 표현 범위
- -2^63 ~ 2^63 -1
int와 long의 범위를 넘어가는 경우?
- BigInteger를 직접 구현하는 방법
BigInteger 사용 방법
- 공식 문서 : https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html
기본적인 사용 방법
```java
import java.math.*;
public class Main {
public static void main() {
BigInteger a = new BigInteger("10000");
BigInteger b = new BigInteger("1000");
// 사칙연산 기호가 먹히지 않으므로, 메소드를 이용해야 함
BigInteger c = a.add(b);
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
BigInteger의 메소드들
System.out.println("a+b = " + a.add(b));
System.out.println("a-b = " + a.substract(b));
System.out.println("a*b = " + a.multiply(b));
System.out.println("a/b = " + a.divide(b));
System.out.println("a%b = " + a.remainder(b));
// 최대공약수를 구하는 함수가 이미 작성되어 있음
System.out.println("gcd(a,b) = " + a.gcd(b));
System.out.println("-a = " + a.negate());
System.out.println("ZERO = " + BigInteger.ZERO);
System.out.println("ONE = " + BigInteger.ONE);
System.out.println("TEN = " + BigInteger.TEN);
System.out.println("a^10 = " + a.pow(10));
BigInteger의 입력과 compareTo메소드
BigInteger a = sc.nextBigInteger();
BigInteger b = sc.nextBigInteger();
int c = a.compareTo(b);
if (c < 0) {
System.out.println("<");
} else if (c == 0) {
System.out.println("==");
} else {
System.out.println(">");
}
System.out.println("compareTo = " + c);
```
BigInteger가 같은지 비교
boolean e = a.equals(b);
if (e) {
System.out.println("==");
} else {
System.out.println("!=");
}
System.out.println("equals = " + e);
```
BigInteger의 사용 예제 1
- boj.kr/10826 문제
```java
BigInteger[] d = new BigInteger[Math.max, n+1, 2];
// Math.max를 사용한 이유는, 최소 2개가 필요하기 때문
// 초기값 0, 1을 넣어주려면 n이 몇이든 2개의 BigInteger 배열이 필요하다.
d[0] = BigInteger.ZERO;
d[1] = BigInteger.ONE;
for(int i=2; i<=n; i++) {
d[i] = d[i-1].add(d[i-2]);
}
System.out.println(d[n]);
```
BigInteger의 사용 예제 2
- boj.kr/10757 문제
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
BigInteger a = new BigInteger(st.nextToken());
BigInteger b = new BigInteger(st.nextToken());
System.out.println(a.add(b));
}
}
```
import java.math.*;
import java.util.*;
public class Main{
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
BigDecimal a = sc.nextBigDecimal();
int b = sc.nextInt();
BigDecimal c = a.pow(b);
System.out.println(c.toPlainString());
// 정확한 값을 출력하기 위한 toPlainString
}
}
```