백준 최대공약수 문제를 푸는데 조건이 아래와 같았다.
첫째 줄에 N(1 ≤ N ≤ 1000)이 주어진다. 둘째 줄에는 N개의 양의 정수가 공백으로 구분되어 주어진다. 이 수는 모두 1,000,000,000보다 작고, N개의 수를 곱하면 A가 된다. 셋째 줄에 M(1 ≤ M ≤ 1000)이 주어진다. 넷째 줄에는 M개의 양의 정수가 공백으로 구분되어 주어진다. 이 수는 모두 1,000,000,000보다 작고, M개의 수를 곱하면 B가 된다. |
A와 B가 될 수 있는 최대의 수를 계산하면 적어도 999,999,999 * 999,999,999 * ..... 1000번 을 한 수였다.
즉 일반적인 정수형 변수로는 크기를 담을 수 없었다.
이 문제를 해결하기 위해 string 형식을 이용하는 BigInteger를 사용하였다!
*BigInteger란?
- int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647,
long은 메모리 크기는 8byte로 표현할 수 있는 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807이다.
그 범위를 넘어서게 되면 모두 0으로 출력이 된다.
하지만 이 범위를 넘어서는 정수를 처리할 경우가 있을 것이다. 이때 사용하는 것이 BigInteger이다.
- BigInteger는 문자열 형태로 이루어져 있어 숫자의 범위가 무한하기에 어떠한 숫자이든지 담을 수 있다.
* BigInteger 선언
BigInteger bigNumber = new BigInteger("1"); // 공백 X, 초기값으로 저장할 숫자를 써준다.
- 선언은 위와같이 한다. BigInteger는 class형식이다.
* BigInteger 계산
- BigInteger는 우리가 일반적으로 사용하는 사칙연산이 불가능하다. 그러므로 BigInteger 내부에 있는 메서드를 사용해 서 계산해야한다. 또한 각 함수내에 들어가는 피연산자도 BigInteger형식이여야 한다.
- bigInteger1.add(bigInteger2); // 덧셈(+)
- bigInteger1.substract(bigInteger2); // 뺄셈(-)
- bigInteger1.multiply(bigInteger2); // 곱셈(*)
- bigInteger1.divide(bigInteger2); // 나눗셈(/)
- bigInteger1.remainder(bigInteger2); // 나머지(%)
* BigInteger 형변환
형변환은 위와같이 사용하면 된다.
* BigInteger 비교
- BigInteger의 비교는 클래스 내의 compareTo()메소드를 사용하면 된다.
두 수를 비교해서 왼쪽수가 더 크면 1, 같으면 0, 오른쪽수가 더 크면 -1이 출력된다.
'개념공부' 카테고리의 다른 글
알고리즘 디자인 설계 : Flowchart와 Psuedo-code (0) | 2021.12.27 |
---|---|
[기초 코딩용어 해설] 01. 컴퓨터와 인터넷 (0) | 2021.12.03 |
[Deque] queue(큐)와 stack(스택)을 둘 다 사용할 수 있는 deque(덱) (0) | 2021.11.04 |
[Junit] 단정함수 및 기능 (0) | 2021.10.22 |
[Spring / BackEnd] 404 Error Exception 날리는 법 (0) | 2021.10.20 |
댓글