[실전 문제] 큰 자릿수 덧셈
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 |