본문 바로가기
개념공부

[BigInteger] 무한대로 큰 수를 계산해야 한다면? BigInteger

by 29살아저씨 2021. 11. 5.
반응형
 

2824번: 최대공약수

첫째 줄에 N(1 ≤ N ≤ 1000)이 주어진다. 둘째 줄에는 N개의 양의 정수가 공백으로 구분되어 주어진다. 이 수는 모두 1,000,000,000보다 작고, N개의 수를 곱하면 A가 된다. 셋째 줄에 M(1 ≤ M ≤ 1000)이

www.acmicpc.net

백준 최대공약수 문제를 푸는데 조건이 아래와 같았다.

첫째 줄에 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 계산

 

출처 : https://coding-factory.tistory.com/604

- BigInteger는 우리가 일반적으로 사용하는 사칙연산이 불가능하다. 그러므로 BigInteger 내부에 있는 메서드를 사용해    서 계산해야한다. 또한 각 함수내에 들어가는 피연산자도 BigInteger형식이여야 한다.

- bigInteger1.add(bigInteger2); // 덧셈(+)

- bigInteger1.substract(bigInteger2); // 뺄셈(-)

- bigInteger1.multiply(bigInteger2); // 곱셈(*)

- bigInteger1.divide(bigInteger2); // 나눗셈(/)

- bigInteger1.remainder(bigInteger2); // 나머지(%)

* BigInteger 형변환

 

출처 : https://coding-factory.tistory.com/604

형변환은 위와같이 사용하면 된다.

* BigInteger 비교

출처 : https://coding-factory.tistory.com/604

- BigInteger의 비교는 클래스 내의 compareTo()메소드를 사용하면 된다. 

  두 수를 비교해서 왼쪽수가 더 크면 1, 같으면 0, 오른쪽수가 더 크면 -1이 출력된다.

반응형

댓글