본문으로 바로가기

10757. 큰 수 A+B

category 카테고리 없음 2021. 8. 17. 02:19

[ 문제 ]

두 정수 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이 붙게 됩니다.

이 경우만 잘 생각한다면 무리없이 문제를 풀 수 있다고 생각합니다.