[ 문제 ]
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
[ 입력 ]
- 첫째 줄에 A와 B가 주어진다. (0 < A,B < 10)
[ 출력 ]
- 첫째 줄에 A+B를 출력한다.
[ 예제 입력 ]
9223372036854775807 9223372036854775808
[ 예제 출력 ]
18446744073709551615
import java.util.*;
import java.io.*;
public class Main {
public static int getLast(String s) {
if (s == "")
return 0;
else
return Integer.parseInt(s.charAt(s.length() - 1) + "");
}
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String num1 = st.nextToken();
String num2 = st.nextToken();
int carry = 0;
String result = "";
int max = Math.max(num1.length(), num2.length());
for (int i = 0; i < max; i++) {
int sum = getLast(num1) + getLast(num2) + carry;
if (sum > 9) carry = sum / 10;
else carry = 0;
result = (sum % 10) + result;
if (!num1.equals("")) num1 = num1.substring(0, num1.length() - 1);
if (!num2.equals("")) num2 = num2.substring(0, num2.length() - 1);
}
if (carry == 0)
System.out.println(result);
else
System.out.println(carry + result);
}
}
carry를 처리하는 과정이 약간 까다로울 수 있었다고 생각합니다.
carry가 발생하는 경우도 있고 발생하지 않는 경우도 있기 때문에, 해당 케이스마다의 처리 방법을 잘 구현하는게 관건인 것 같습니다.
또, 제일 마지막에 carry가 발생했을 경우에는 반복문 밖에서 결과값에 carry를 붙여줘야 하는데,
carry가 발생하지 않았을 경우를 나눠서 생각하지 않으면 결과값 앞에 0이 붙게 됩니다.
이 경우만 잘 생각한다면 무리없이 문제를 풀 수 있다고 생각합니다.