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
딱 넘는 모습을 볼 수 있다.
long
보다 큰 숫자를 다룰 때 쓸 수 있는 게 무엇이 있을까 찾아보던 중 BigInteger
라는 것을 알게 되었다.BigInteger
는 문자열 형태로 이루어져 있어 숫자의 범위가 무한하기에 어떠한 숫자이든지 담을 수 있다고 한다.BigInteger
를 사용해서 문제를 해결할 수 있었고, 정리해두려고 한다.BigInteger a = new BigInteger(numbers[0]);
BigInteger b = new BigInteger(numbers[1]);
long
으로 선언했던 것을 BigInteger
로 바꾸어 주었다.BigInteger
는 java.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