CS/알고리즘_문제풀이(자바)

큰 자릿수 뺄셈

Jedy_Kim 2021. 9. 13. 21:15
728x90

문제

두 자연수가 주어질 때 그들의 뺄셈을 계산하는 프로그램을 작성하시오. 각 수는 1 이상 10의 100승 미만의 범위를 가진다.  

입력

첫 번째 줄과 두 번째 줄에 각각 하나의 자연수가 주어진다.  

출력

첫 번째 줄에 뺄셈의 결과를 출력한다.  

예제 입력

1962831868293922 2528838232

예제 출력

1962829339455690

 

예제 입력

18592918185 2195812983912895799129

예제 출력

-2195812983894302880944

 

// 코드

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
77
import java.util.*;
import java.io.*;
 
public class Main{
  public static void main(String[] args) throws Exception {
 
    // Please Enter Your Code Here
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String[] str_a = br.readLine().split("");
    String[] str_b = br.readLine().split("");
    boolean flag = true;
    
    if(str_a.length < str_b.length) {
      String[] temp = str_a;
      str_a = str_b;
      str_b = temp;
      flag = false;
    } else if(str_a.length == str_b.length) {
      for(int i = 0; i < str_a.length; i++) { 
        if(Integer.parseInt(str_a[i]) < Integer.parseInt(str_b[i])) {
          String[] temp = str_a;
          str_a = str_b;
          str_b = temp;
          flag = false;
        }
      }
      
    } 
    
    int str_a_len = str_a.length;
    int str_b_len = str_b.length;
    
    int max_val = Math.max(str_a_len, str_b_len);
    
    int[] A = new int[max_val+1];
    int[] B = new int[max_val+1];
    
    // A 초기화
    for(int i=str_a_len-1, idx=0; i>=0; i--, idx++) {
      A[idx] = Integer.parseInt(str_a[i]);
    }
    
    // B 초기화
    for(int i=str_b_len-1, idx=0; i>=0; i--, idx++) {
      B[idx] = Integer.parseInt(str_b[i]);
    } 
    
    // 연산을 시작한다. 
    for(int i=0; i<max_val; i++) {
      int tempVal = A[i] - B[i];
      if(tempVal<0) {
        tempVal = 10 + tempVal;
        A[i+1-= 1;
      } 
      A[i] = tempVal;
    }
    
    boolean zeroFlag = false;
    int cnt = 0;
    String resStr = "";
    if(!flag) resStr += "-";
    for(int i=max_val-1; i>=0; i--) {
      if(A[i] != 0) zeroFlag = true;
      if(zeroFlag) {
        cnt++;
        resStr += A[i];
      }
    }
    
    if(cnt == 0) {
      System.out.println(0);
    } else {
      System.out.println(resStr);  
    } 
    
  }
}
cs

 

반응형

'CS > 알고리즘_문제풀이(자바)' 카테고리의 다른 글

날짜 계산  (0) 2021.09.14
일곱 난쟁이  (0) 2021.09.14
큰 수 A+B  (0) 2021.09.13
문자열 압축  (0) 2021.09.13
팰린드롬 조사  (0) 2021.09.13