문제풀이

[JAVA] 백준 10757번 큰 수 A + B : BigInteger, StringBuilder

IT록흐 2021. 7. 19. 12:33
반응형
 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

1. 문제 추상화

 

정수 자료형으로 담을 수 없는 두 큰 정수의 합을 구하시오.

 

2. 알고리즘 

 

long이나 int 같은 정수 자료형이 담을 수 없을 정도로 큰 수는 '문자열'을 이용하여 계산해야한다. 

 

첫 번째 방법 : StringBuilder

 

1. 문자열로 두 수를 입력받는다.

2. StringBuilder의 reverse() 메소드를 활용하여, 문자열을 역순으로 정렬한다.

3. 자릿수가 적은 수는 적은만큼 0으로 채운다. EX) A : 4321 , B : 21 => A : 4321 , B : 2100 

4. 문자열을 0부터 하나씩 추출하여 합한다. 

5. 합이 10이상이면 올림한다.

 

 

두 번째 방법 : BigInteger

 

1. BigInteger 객체로 수를 받아 add() 메소드로 합연산을 한다.

 

 

3. 코드

 

첫 번째 방법 ( StringBuilder )

 

package boj10757;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		StringBuilder sb;
		
		sb = new StringBuilder(sc.next());
		String A = sb.reverse().toString(); // 문자열 역순 전환
		
		sb = new StringBuilder(sc.next());
		String B = sb.reverse().toString(); // 문자열 역순 전환
	
    		// 길이 맞추기
		if(A.length() > B.length()) {
			B = appendZero(B, A.length() - B.length()); // 적은 길이만큼 0으로 채우기
		}else {
			A = appendZero(A, B.length() - A.length()); // 적은 길이만큼 0으로 채우기
		}
	
		String result= "";
		int carry = 0; // 올림

		for(int i=0; i< A.length(); i++) {
			int a = A.charAt(i) - '0';
			int b = B.charAt(i) - '0';
			int sum = a + b + carry;
			
			if(sum >= 10) { // 합이 10보다 크면 올림은 1이다.
				carry = 1;
			}else {
				carry = 0;
			}
				result += sum%10;
		}
		
		if(carry == 1) { // 마지막 수의 합이 10이상이면 1을 추가한다.
			result += 1;
		}
		
		sb = new StringBuilder(result);
		System.out.println(sb.reverse().toString());

	}
	
	public static String appendZero(String value, int count) {
		
		for( int i = 0; i< count; i++) {
			value += "0";
		}
		return value;
	}

}

 

 

두 번째 방법 ( BigInteger )

 

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		BigInteger A = new BigInteger(sc.next());
		BigInteger B = new BigInteger(sc.next());
		
		System.out.println(A.add(B));

	}

}
반응형