[실전 문제] 큰 자릿수 덧셈

2021. 2. 18. 10:31코딩 테스트/실전 문제

1. 문제

두 자연수가 주어질 때 그들의 덧셈을 계산하는 프로그램을 작성하시오. 각 수는 1 이상 10^100(10의 100 거듭제곱) 미만의 범위를 가진다. 


입력

첫 번째 줄과 두 번째 줄에 각각 하나의 자연수가 주어진다. 

출력

첫 번째 줄에 덧셈의 결과를 출력한다.

예제 입력

123112981293812938139
1298928491101221811

예제 출력

124411909784914159950

 

 

 

2. 풀이

이 문제는 문자열을 배열로 만들고, 자릿수를 가장 큰 쪽에 맞춰 일의 자리부터 계산해야한다.

import java.io.*;

public class Main {

    private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {

        String[] s1 = br.readLine().split("");
        String[] s2 = br.readLine().split("");

        int maxLen = Math.max(s1.length, s2.length);
        int[] n = new int[maxLen];
        int[] m = new int[maxLen];
        for(int i = 0; i < maxLen; i++) {
            if(s1.length > i) n[maxLen-1-i] = Integer.parseInt(s1[s1.length-1-i]);
            else n[maxLen-1-i] = 0;

            if(s2.length > i) m[maxLen-1-i] = Integer.parseInt(s2[s2.length-1-i]);
            else m[maxLen-1-i] = 0;
        }

        for(int i = maxLen - 1; i >= 0; i--) {
            n[i] = n[i] + m[i];
            if(i > 0 && n[i] >= 10) { // n[0]은 10을 넘어도 되도록 설정
                n[i-1]++;
                n[i] -= 10;
            }
        }

        for(int i = 0; i < maxLen; i++) {
            bw.write(n[i] + "");
        }

        br.close();
        bw.flush();
        bw.close();
    }

}
728x90

'코딩 테스트 > 실전 문제' 카테고리의 다른 글

[실전 문제] 문자열 정렬  (0) 2021.02.18
[실전 문제] 큰 자릿수 곱셈  (0) 2021.02.18
[실전 문제] 문자열 압축  (0) 2021.02.17
[실전 문제] 팰린드롬 조사  (0) 2021.02.17