ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Java에서 큰 수 다루기(BigInteger)
    Java 2024. 5. 5. 23:34
    BigInteger란?

     

    프로그램을 만들 때 조건에 의해 int나 long범위를 벗어나는 굉장히 큰 수의 셈이 필요한 경우가 있다.

    변수가 정수의 표현 범위를 넘어서게 되면 0이나 랜덤 값으로 출력된다. 최악의 경우를 고려해야 하므로, 무한의 정수가 들어갈 가능성이 있다면 BigInteger를 사용해야 한다.

    BigInteger는 int, long, Integer Long과 달리 문자열 형태로 숫자를 처리하므로 아무리 큰 수라도 담을 수 있다.

     

    타입 범위 메모리 크기(64bit) 기본/참조형 저장된 위치
    int -2,147,483,648 ~
    2,147,483,647
    4 Byte 기본형 Stack
    long -9,223,372,036,854,775,808 ~ 
    9,223,372,036,854,775,807
    8 Byte 기본형 Stack
    BigInteger 무한 (Infinity) Minimum 70 Byte 참조형 Heap

     

     

    BigInteger 사용법

     

    선언

    import java.math.BigInteger;
    
    BigInteger bigNumber = new BigInteger("0");
    • BigInteger는 math 라이브러리에 포함되어있다.
    • BigInteger를 초기화하기 위해서는 문자열을 인자값으로 넘겨주어야 한다. 또 다른 방법으로는 byte[ ]와 Random 변수를 사용해서 2진수를 활용한 선언과 범위 안에서 랜덤한 수를 지정하는 선언도 사용할 수 있다.

     

     

    사칙연산

    BigInteger bigNumber1 = new BigInteger("1");
    BigInteger bigNumber2 = new BigInteger("1");
    
    System.out.println("덧셈(+) :" +bigNumber1.add(bigNumber2));
    System.out.println("뺄셈(-) :" +bigNumber1.subtract(bigNumber2));
    System.out.println("곱셈(*) :" +bigNumber1.multiply(bigNumber2));
    System.out.println("나눗셈(/) :" +bigNumber1.divide(bigNumber2));
    System.out.println("나머지(%) :" +bigNumber1.remainder(bigNumber2));
    
    /*
      덧셈(+) :2
      뺄셈(-) :0
      곱셈(*) :1
      나눗셈(/) :1
      나머지(%) :0
     */

     

    BigInteger는 문자열이기 때문에 사칙연산이 안된다. 따라서 BigInteger내부의 숫자를 계산하기 위해서는 BigInteger형 객체를 생성한 후 BigInteger 클래스 내부에 있는 메서드를 사용해야 한다.

     

     

    형 변환

    BigInteger bigNumber = BigInteger.valueOf(10); //int -> BigIntger
    
    int int_bigNum = bigNumber.intValue(); //BigIntger -> int
    long long_bigNum = bigNumber.longValue(); //BigIntger -> long
    float float_bigNum = bigNumber.floatValue(); //BigIntger -> float
    double double_bigNum = bigNumber.doubleValue(); //BigIntger -> double
    String String_bigNum = bigNumber.toString(); //BigIntger -> String

     

     

    2개의 수 비교

    compareTo를 사용한다.

    BigInteger bigNumber1 = new BigInteger("10");
    BigInteger bigNumber2 = new BigInteger("100");
    		
    int compare = bigNumber1.compareTo(bigNumber2);

     

    compareTo 리턴 값과 동일하게 1, 0, -1로 표현된다.

    • 큰 수를 작은 수랑 비교할 때 : 1
    • 두 개의 수가 같을 때 : 0
    • 작은 수를 큰 수랑 비교할 때 : -1

     

    #참고

    https://lsmman.tistory.com/47

    Java SE 7 공식문서

Designed by Tistory.