기록하는 공부
[Java] BigInteger를 알아보자 ! 본문
개요
최근 콤비네이션 문제를 풀었는데 long으로도 커버가 안 되는 큰 값이 나오는 경우에 BigInteger를 사용한다는 것을 알게 되었다. 그래서 이번 포스팅에서는 BigInteger에 대해 정리해보고자 한다.
자바 자료형 크기
BigInteger란?
자바 API 문서에서 확인하면 Immutable arbitrary-precision integers라고 적혀 있다.
이는 불변의 임의 정밀도 정수라고 표현되어 있으며 간단히 말해 값이 정해지지 않는 수를 표현할 수 있다.
문서에서 확인 해보면 BigInteger는 문자열 형태로 만들어졌기 때문에 숫자 범위의 제한이 없다.
BigInteger를 사용하려면 import를 해줘야 한다.
import java.math.BigInteger;
BigInteger num = new BigInteger();
BigInteger의 변수
BigInteger는 변수가 3가지 있다.
BigInteger num = BigInteger.ZERO; // 0
BigInteger num = BigInteger.ONE; // 1
BigInteger num = BigInteger.TEN; // 10
BigInteger의 메서드 (사칙연산)
BigInteger에서 제공하는 메서드는 많다.
그중 몇 가지를 살펴보자.
아래는 간단한 사칙연산이 가능한 메서드이다.
BigInteger num1 = new BigInteger("1");
BigInteger num2 = new BigInteger("2");
System.out.println("덧셈(+) : " + num1.add(num2));
System.out.println("뺄셈(-) : " + num1.subtract(num2));
System.out.println("곱셈(*) : " + num1.multiply(num2));
System.out.println("나눗셈(/) : " + num1.divide(num2));
System.out.println("나머지(%) : " + num1.remainder(num2));
변수로부터 값을 받아와 bigInteger로 변환해 사칙연산을 하고 싶은 경우에는 아래와 같이 사용할 수 있다.
valueOf() 메서드를 이용해 변수를 bigInteger로 바꾼 후 계산한다.
BigInteger num = BigInteger.TEN; // 10
int val = 8;
BigInteger result;
// num + val 덧셈
result = num.add(BigInteger.valueOf(val));
// num + val 뺄셈
result = num.subtract(BigInteger.valueOf(val));
// num + val 곱셈
result = num.multiply(BigInteger.valueOf(val));
// num + val 나눗셈
result = num.divide(BigInteger.valueOf(val));
BigInteger의 메서드 (형 변환)
위에서는 정수형 변수를 BigInteger.valueOf() 메서드를 이용해 BigInteger로 바꿨다.
그렇다면 BigInteger를 형 변환하는 방법을 알아보자.
int, long, float, double, string + Value()를 붙여 메서드로 사용하면 형 변환을 할 수 있다.
BigInteger num = BigInteger.TEN; // 10
// BigInteger -> int
int int_num = num.intValue();
// BigInteger -> float
int float_num = num.floatValue();
// BigInteger -> String
int string_num = num.toString();
BigInteger의 메서드 (두 수의 비교)
두 수의 비교는 compareTo() 메서드를 사용하면 된다.
compareTo()의 결과는 -1, 0, 1 중에 하나가 반환된다.
-1은 ()안에 값보다 작은 경우에 반환되고,
0은 같은 경우,
1은 비교값이 파라미터 값보다 큰 경우에 반환된다.
BigInteger num1 = new BigInteger("1");
BigInteger num2 = new BigInteger("2");
int result = num1.compareTo(num2);
System.out.println(result); // -1
참고자료
https://coding-factory.tistory.com/604
https://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html