BigInteger

이호인·2022년 7월 30일
0

Java

목록 보기
6/6

10757번 문제 (큰 수 A + B)

간단하게 A + B를 해주면 되는 문제.

말 그대로 두 정수 A와 B를 입력 받아 계산해서 출력하면 되는 간단한 문제였다.

알고 있는 것 중에 long이 가장 크니까 long을 사용해서 풀어보려 시도했다.

Public class Main {
	public static void main(String[] args) throws IOException {
    	BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String tmp = bf.readLine();
        String[] numbers = tmp.split(" ");
        
        Long a = Long.parseLong(numbers[0]);
        Long b = Long.parseLong(numbers[1]); // 에러 발생 !!
        
        System.out.printlin(a + b);
    }
}

결과는 NumberFormatException이 발생했다.
테스트는 문제에서 제시한 예시대로
9223372036854775807 9223372036854775808 두 정수로 테스트를 진행했고
B(9223372036854775808)에서만 예외가 터지는 걸 보니 long의 범위를 넘었다고 판단했다.

  • long의 범위

    –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

딱 넘는 모습을 볼 수 있다.

BigInteger

  • long보다 큰 숫자를 다룰 때 쓸 수 있는 게 무엇이 있을까 찾아보던 중 BigInteger라는 것을 알게 되었다.
  • BigInteger는 문자열 형태로 이루어져 있어 숫자의 범위가 무한하기에 어떠한 숫자이든지 담을 수 있다고 한다.
  • BigInteger를 사용해서 문제를 해결할 수 있었고, 정리해두려고 한다.

사용 방법

BigInteger a = new BigInteger(numbers[0]);
BigInteger b = new BigInteger(numbers[1]);
  • long으로 선언했던 것을 BigInteger로 바꾸어 주었다.
  • BigIntegerjava.math 클래스에 있으며 사용하기 위해서는 문자열을 인자값으로 넘겨 초기화 해주면 된다.

계산하기

// 덧셈 
a.add(b);
// 뺄셈
a.subtract(b);
// 곱셈
a.multiply(b);
// 나눗셈
a.divide(b);
// 나머지
a.remainder(b);
// 비교
a.compareTo(b);

형변환

BigInteger big = BigInteger.valueOf(100000); // int -> BigIntger

int bigToInt = big.intValue(); // BigIntger -> int
long bigToLong = big.longValue(); // BigIntger -> long
float bigToFloat = big.floatValue(); // BigIntger -> float
double bigToDouble = big.doubleValue(); // BigIntger -> double
String bigToString = big.toString(); // BigIntger -> String

reference!

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

profile
공부 기록

0개의 댓글