[실전 문제] 큰 자릿수 곱셈
2021. 2. 18. 12:10ㆍ코딩 테스트/실전 문제
1. 문제
두 자연수가 주어질 때 그들의 곱셈을 계산하는 프로그램을 작성하시오. 각 수는 1 이상 10^100 미만의 범위를 가진다.
입력
첫 번째 줄과 두 번째 줄에 각각 하나의 자연수가 주어진다.
출력
첫 번째 줄에 곱셈의 결과를 출력한다.
예제 입력
123112981293812938139
1298928491101221811
예제 출력
159914959026945386297336486942660549729
2. 풀이
이 문제는 작은 수를 예시로 가져와 풀어야 쉽게 이해가 된다. 예를 들어 주어진 입력이 14 x 14라면 다음과 같이 처리가 된다.
package org.example;
import java.io.*;
public class Main {
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
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];
for(int i = s1.length - 1; i >= 0; i--) {
n[s1.length-1-i] = Integer.parseInt(s1[i]);
}
for(int i = s2.length - 1; i >= 0; i--) {
m[s2.length-1-i] = Integer.parseInt(s2[i]);
}
for(int i = 0; i < s1.length; i++) {
for(int j = 0; j < s2.length; j++) {
result[i+j] += n[i] * m[j];
}
}
for(int i = 0; i < s1.length + s2.length; i++) {
if(i < s1.length + s2.length - 1 && result[i] >= 10) {
result[i+1] += result[i]/10;
result[i] %= 10;
}
}
int zero = s1.length + s2.length - 1; // 0 삭제를 위한 인덱스
while(result[zero] == 0) {
zero--;
}
for(int i = zero; i >= 0; i--) {
bw.write(result[i] + "");
}
br.close();
bw.flush();
bw.close();
}
}
728x90
'코딩 테스트 > 실전 문제' 카테고리의 다른 글
[실전 문제] 문자열 포함관계 조사 (0) | 2021.02.18 |
---|---|
[실전 문제] 문자열 정렬 (0) | 2021.02.18 |
[실전 문제] 큰 자릿수 덧셈 (0) | 2021.02.18 |
[실전 문제] 문자열 압축 (0) | 2021.02.17 |