본문 바로가기
오래된 글

자바 큰 수 범위를 표현하기 (BigInteger 클래스를 사용하는 방법)

by pagehit 2018. 10. 16.
반응형

큰 수 표현하기


프로그램을 짜다보면 아주 큰 수를 표현해야 할 때가 있다.

피보나치 수열을 계산한다던지, 팩토리얼을 계산한다던지.

곱셈을 계속 해나가다보면 표현할 수 있는 수의 범위를 넘어갈 때가 있다.

데이터 타입 long 형은 약 10의 18승 범위까지 수를 표현한다. 이 범위를 넘어갈 때는 자바에서 제공하는 BigInteger 클래스를 이용하면 된다.


BigInteger Class



Immutable arbitrary-precision integers. All operations behave as if BigIntegers were represented in two's-complement notation (like Java's primitive integer types). BigInteger provides analogues to all of Java's primitive integer operators, and all relevant methods from java.lang.Math. Additionally, BigInteger provides operations for modular arithmetic, GCD calculation, primality testing, prime generation, bit manipulation, and a few other miscellaneous operations.

<source : java docs 8>


자바 다큐먼트를 살펴보면 위와 같은 글이 나온다.

먼저 BigInteger를 사용하기 위해서는 java.lang.Math를 import 해주어야 한다.

BigInteger 는 자바의 기본 연산자들과 관련된 메소드들을 제공한다. 다시 말해 더하기, 빼기, 나누기, 곱하기 등은 연산자(+, -, /, *)를 사용하는 것이 아니라 클래스에서 제공하는 메소드를 사용해야한다. 

또한 modular 연산이라든지, GCD 연산, 비트 연산 또한 메소드로 제공한다.


BigInteger 사용 예시


// BigInteger class
import java.math.*;

public class Tistory {
	public static void main(String[] args) {
		BigInteger bigInteger = new BigInteger("123");
		BigInteger bigZero = BigInteger.ZERO;
		BigInteger bigOne = BigInteger.ONE;
		BigInteger bigTen = BigInteger.TEN;
		
		System.out.println(bigInteger);
		System.out.println(bigOne.add(bigZero));
		System.out.println(bigTen.multiply(bigTen));
		System.out.println(bigZero.compareTo(bigOne));
	}
}

BigInteger 클래스를 사용해주면된다. 자바에서 클래스를 사용하는 방법과 같다.

클래스 메소드 add, multiply 등을 호출해서 사용하면 된다.

또한 비교 연산은 부등호를 사용할 수 없다. 따라서 클래스에서 제공하는 compareTo 를 사용해야한다.


BigInteger 주요 메소드


 add(BigInteger val) 

 this + val 

 덧셈 

 divide(BigInteger val)

 this / val

 나눗셈

 multiply(BigInteger val)

 this * val

 곱셈

 pow(int exponent)

 this ^ exponent 

 지수

 subtrac(BigInteger val)

 this - val

 뺄셈 

 compareTo(BigInteger val)

 this < val 이면 -1 반환

 this = val 이면 0 반환

 this > val 이면 1 반환 

 




반응형

댓글