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

큰 자릿수 곱셈

Jedy_Kim 2021. 9. 14. 19:16
728x90

문제

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

입력

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

출력

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

예제 입력

123112981293812938139

1298928491101221811

예제 출력

159914959026945386297336486942660549729

 

// 코드

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
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[] s1        = br.readLine().split("");
    String[] s2        = br.readLine().split("");
    
    int[] n = new int[s1.length];
    int[] m = new int[s2.length];
    int[] result = new int[s1.length + s2.length];
    
    int nLen = s1.length;
    int mLen = s2.length;
    
    for(int i=nLen-1, idx=0; i>=0; i--, idx++) {
      n[idx] = Integer.parseInt(s1[i]);
    }
    
    for(int i=mLen-1, idx=0; i>=0; i--, idx++) {
      m[idx] = Integer.parseInt(s2[i]);
    }
    
    for(int i=0; i<nLen; i++) {
      for(int j=0; j<mLen; j++) {
        result[i+j] += n[i]*m[j];
      }
    }
    
    for(int i=0; i<(nLen+mLen); i++) {
      if(i<(nLen+mLen-1&& result[i] >= 10) {
        result[i+1+= result[i]/10;
        result[i] %= 10;
      }
    } 
    
    boolean flag = false;
    for(int i=(nLen+mLen-1); i>=0; i--) {
      if(result[i]!=0) flag=true;
      if(flag) {
        System.out.print(result[i] + "");  
      }
    } 
  }
}
cs

 

반응형

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

문자열 포함관계 조사  (0) 2021.09.14
문자열 정렬  (0) 2021.09.14
날짜 계산  (0) 2021.09.14
일곱 난쟁이  (0) 2021.09.14
큰 자릿수 뺄셈  (0) 2021.09.13