본문 바로가기

TroubleShooting/Java

JAVA 에서 큰 숫자 표현

728x90

java 에서 primitive type 형 숫자들중 가장 큰 자릿수를 지원하는 Long 형이나 Double 형의 최대값은 

Long.MAX_VALUE = +9,223,372,036,854,775,807

Double.MAX_VALUE = 1.79769313486231570e+308d

둘다 8바이트이고, 자릿수를 계산해보면 19, 20 자리 정도이다. 이런 자릿수보다 더 큰 숫자를 표현하려면 어떻게 해야할까.

java 에서 BigInteger(java.math.BigInteger) 를 사용하면 큰 숫자를 표현가능하다. 예를 들어 1 부터 100 까지 숫자를 차례로 곱해서 결과값을 구하는 프로그램은 다음과 같이 표현할 수 있다.

import java.math.BigInteger;

public class BigInt {
    public static void main(String[] args) {
        BigInteger a = new BigInteger("1");
        BigInteger b = new BigInteger("1");
        int i = 0;

        for (i = 0; i < 100; i++) {
            a = a.add(BigInteger.ONE);
            b = b.multiply(a);
        }
        System.out.println("big is = " + b.toString());

        System.out.println("long MAX_VALUE = " + Long.MAX_VALUE);
        System.out.println("double MAX_VALUE = " + Double.MAX_VALUE);
    }
}

결과값은 160 자리까지 나온다.

big is = 9425947759838359420851623124482936749562312794702543768327889353416977599316221476503087861591808346911623490003549599583369706302603264000000000000000000000000

long MAX_VALUE = 9223372036854775807

double MAX_VALUE = 1.7976931348623157E308


참고로 다음은 java primitive type 을 간단하게 설명한 링크이다.