기록하는 공부

[Java] BigInteger를 알아보자 ! 본문

Language/Java

[Java] BigInteger를 알아보자 !

SS_StudySteadily 2023. 7. 20. 17:30
728x90
반응형

 

 

개요

 

최근 콤비네이션 문제를 풀었는데 long으로도 커버가 안 되는 큰 값이 나오는 경우에 BigInteger를 사용한다는 것을 알게 되었다. 그래서 이번 포스팅에서는 BigInteger에 대해 정리해보고자 한다.

 

 

 

 


 

 

자바 자료형 크기

 

 

https://catsbi.oopy.io/6541026f-1e19-4117-8fef-aea145e4fc1b

 

 

 

 


 

 

BigInteger란?

 

 

자바 API 문서에서 확인하면 Immutable arbitrary-precision integers라고 적혀 있다.

이는 불변의 임의 정밀도 정수라고 표현되어 있으며 간단히 말해 값이 정해지지 않는 수를 표현할 수 있다.

문서에서 확인 해보면 BigInteger는 문자열 형태로 만들어졌기 때문에 숫자 범위의 제한이 없다.

 

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

 

[Java] 큰 숫자(정수) 다루기 BigInteger 사용법 & 예제 총정리

BigInteger를 사용해야 하는 이유 Type 범위 int -2,147,483,648 ~ 2,147,483,647 long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이고 long

coding-factory.tistory.com

 

 

https://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html

 

BigInteger (Java Platform SE 6)

java.math Class BigInteger java.lang.Object java.lang.Number java.math.BigInteger All Implemented Interfaces: Serializable, Comparable public class BigIntegerextends Numberimplements Comparable Immutable arbitrary-precision integers. All operations behave

docs.oracle.com

 

728x90
반응형