본문 바로가기
알고리즘 문제풀이

[Backjoon] 10757번 문제 - 큰 수 A+B

by 마스터누누 2017. 6. 27.
728x90
반응형

A+B를 계산하시오.


풀이


문제 설명만 봐서는 엄청 간단하지만

입력으로 주어지는 A와 B의 범위가 10^10000 이기 때문에 일반적인 데이터형으로는 계산이 불가능하다.

이러한 이유때문인지는 몰라도, 맥os나 안드로이드에서 기본적으로 주어지는 계산기에도 일정 범위 이상의 수는

합이나 곱의 계산이 불가능하다.


때문에 수를 그냥 받아오는 것이 아니라 문자형으로 받은 뒤 정수형 배열에 쪼개서 넣어준다.

그리고 맨 첫자리와 첫자리가 대응되도록 더하기를 해주고 해당 인덱스에서 올림수가 발생하면 다음 배열로 넘기도록한다.

이렇게 마지막 자리까지 덧셈이 완료되면, 결과값 배열을 출력해주면서 프로그램을 종료한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import java.util.Scanner;
 
/**
 * Created by homr on 2017. 6. 26..
 */
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str1 = sc.next();
        String str2 = sc.next();
 
        int[] arr1 = new int[str1.length()];
        int[] arr2 = new int[str2.length()];
 
        reverse(str1, arr1);
        reverse(str2, arr2);
 
        int maxSize = arr1.length>arr2.length ? arr1.length :arr2.length;
        int minSize = arr1.length<arr2.length ? arr1.length :arr2.length;
        int[] result = new int[maxSize];
        int C = 0;
 
        for(int i = 0; i<minSize; i++){
            int sum = arr1[i]+arr2[i]+C;
 
            if(sum>=10){
                result[i] = sum%10;
                C = 1;
            }else{
                result[i] = sum;
                C = 0;
            }
        }
 
        for(int i=minSize; i<maxSize; i++){
 
            if(arr1.length>arr2.length){
                int sum = arr1[i]+C;
                if(sum>=10){
                    result[i]=sum%10;
                    C = 1;
                }else{
                    result[i]=sum;
                    C = 0;
                }
 
            }else{
                int sum = arr2[i]+C;
                if(sum>=10){
                    result[i]=sum%10;
                    C = 1;
                }else{
                    result[i]=sum;
                    C = 0;
                }
            }
        }
 
        if(C==1){
            System.out.print(C);
        }
 
        for(int i = result.length-1; i>=0; i--){
            System.out.print(result[i]);
        }
 
 
    }
 
    public static void reverse(String str, int[] arr){
        for(int i=str.length()-1; i>=0; i--) {
            arr[str.length()-1-i] = str.charAt(i) - '0';
        }
    }
}
 
cs


반응형

댓글