백준/JAVA

[백준/JAVA] 10757번 큰 수 A+B

누룽지맛치킨 2023. 1. 19. 13:24
  • 큰 수의 합 구하기

https://www.acmicpc.net/problem/10757

1. 문제

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

2. 문제 접근

  • 두 개의 수를 입력받는다.
  • 두 개의 수의 합을 출력한다. -> 단, 두 수의 범위는 0 < A,B < 1010000

핵심!

  • 자바에서 정수 자료형 중 가장 메모리가 큰 것은 long이다. 16byte로 1010000 의 범위의 수를 저장하지 못한다. 고로, 문자열로 합을 구해보자. 아래의 코드는 문자열의 문자 하나하나 접근하며 합을 구하는 방법이다. 입력 받은 두 수를 정수의 배열에 저장해두고 배열 인덱스 단위로 합을 구하여도 된다!!

3. 코드

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        String A = st.nextToken();
        String B = st.nextToken();
        StringBuilder sb = new StringBuilder();
        int temp = 0;
        int num = 0;
        int i = (A.length() < B.length()) ? A.length() : B.length();
        for(int j =  0; j<i;j++) {
            num = (int)A.charAt(A.length()-1-j) -'0' + (int)B.charAt(B.length()-1-j)-'0' + temp;
            temp = num/10;
            num = num%10;
            sb.append(num);
        }
        if(A.length()>B.length()) {
            for(int j = i ; j<A.length();j++) {
                num = (int)A.charAt(A.length()-1-j)-'0' + temp;
                temp = num/10;
                num = num%10;
                sb.append(num);
            }
        }
        else {
            for(int j = i ; j<B.length();j++) {
                num = (int)B.charAt(B.length()-1-j)-'0' + temp;
                temp = num/10;
                num = num%10;
                sb.append(num);
            }
        }
        if(temp==1) {
            sb.append(1);
        }
        sb.reverse();
        System.out.println(sb);
    }
}