백준 브론즈 등급의 알고리즘 문제를 풀던 중 ....
https://www.acmicpc.net/problem/2338
위와 같은 문제를 만났다.
문제 설명을 봐선 크게 특별할게 없지만...
"각각의 수는 10진수로 1,000자리를 넘지 않으며 양수와 음수가 모두 주어질 수 있다."
라는 설명이 있다.
1,000자리면 굉장히 긴 자릿수 이기때문에 평소 사용하던 int 를 사용해선 범위를 초과하게 될것이다.
또한, long 타입으로도 해결이 되지않을것이다.
int : 32bits (-2147483648 ~ 2147483647)
long : 64bits (-9223372036854775808 ~ 9223372036854775807)
이를 대체할 방법이 있으니, 그게 바로 BigInteger를 사용하는 것이다.
BigInteger는 무한대의 정수를 저장할 수 있다고 한다.
다시 백준의 문제를 보면 간단한 사칙연산을 해야하는데... BigInteger를 사용하면서 사칙연산을 int때와 동일하게 적용하면???
다음과 같은 오류를 마주치게 될것이다.
BigInteger는 int형과 다르게 메소드를 사용하여 연산을 해야한다.
- 더하기(+) : add()
- 빼기(-) : substract()
- 곱하기(*) : multiply()
- 나누기(/) : divide()
공식문서에서 메소드들을 확인할 수 있다.
출처 - https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigInteger.html
문제의 답 -
package Bronze_5.Q2338;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigInteger A = sc.nextBigInteger();
BigInteger B = sc.nextBigInteger();
sc.close();
System.out.println(A.add(B));
System.out.println(A.subtract(B));
System.out.println(A.multiply(B));
}
}
'Language > Java' 카테고리의 다른 글
[JAVA] JVM, JRE, JDK 자바의 동작원리 (0) | 2023.01.13 |
---|---|
[Java] JPA ( Java Persistence API ) (0) | 2022.01.16 |
[JAVA] 자바 쓰레드 ( Java Thread ) (0) | 2020.06.28 |
[JAVA] 자바 해쉬 맵 ( Java HashMap ) (0) | 2020.06.24 |
[JAVA] 자바 리스트 앤 셋 ( Java List And Set ) (0) | 2020.06.23 |