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 |
반응형