# 백준BOJ/JAVA : 2338번 긴자리 계산

- Author: @laetipark
- Published: 2022-08-19
- Updated: 2022-08-23
- Source: http://blex.me/@laetipark/%EB%B0%B1%EC%A4%80baekjoonjava-2338%EB%B2%88-%EA%B8%B4%EC%9E%90%EB%A6%AC-%EA%B3%84%EC%82%B0
- Tags: 백준, java, boj, biginteger, 긴자리계산, baekjoon

---

[2338번 : 긴자리 계산 원본](https://www.acmicpc.net/problem/2338)

### 알고리즘 분류
- 수학
- 사칙연산
- 임의 정밀도 / 큰 수 연산

### 문제
두 수 A, B를 입력받아, A+B, A-B, A×B를 구하는 프로그램을 작성하시오.

### 입력
첫째 줄에 A가, 둘째 줄에 B가 주어진다.  
각각의 수는 10진수로 1,000자리를 넘지 않으며 양수와 음수가 모두 주어질 수 있다.  

### 출력
첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A×B를 출력한다.
각각을 출력할 때, 답이 0인 경우를 제외하고는 0으로 시작하게 해서는 안 된다.
(1을 01로 출력하면 안 된다는 의미)

### 풀이

> **정수 자료형 표현**
> - byte / 8bits / -2^7 ~ 2^7-1 (-128 ~ 127)
> - short / 16bits / -2^15 ~ 2^15-1 (-32768 ~ 32767)
> - int / 32bits / -2^31 ~ 2^31-1 (-2147483648 ~ 2147483647)
> - long / 64bits / -2^63 ~ 2^63-1 (-9223372036854775808 ~ 9223372036854775807)

**정수 자료형으로 1000자리 숫자를 표현할 수 없기 때문에 BigInteger이라는 클래스를 이용한다.**
- BigInteger : java.math 패키지에 포함된 클래스로 문자열 형태로 숫자를 무한대로 받을 수 있음
  - 사칙연산/나머지 : add(), subtract(), multiply(), divide(), remainder()
  - [BigInteger 클래스 문서](https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html)

### 소스 코드
```java
public class Baek2338 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);

        BigInteger n = scanner.nextBigInteger();
        BigInteger m = scanner.nextBigInteger();

        System.out.println(n.add(m));
        System.out.println(n.subtract(m));
        System.out.println(n.multiply(m));

        scanner.close();
    }
}
```
