A와 B 모두 최대 100자리이므로, 자바 자료형으로 담을 수 없는 숫자가 나올 수 있습니다.
문제에서 +와 * 연산만 진행한다 했으므로 그냥 문자열로 연산자를 그럴 듯하게 따라하게 되었습니다.
+일 경우
같은 수의 덧셈 --> 입력받은 문자열의 0번째 문자를 2로만 변경
다른 수의 덧셈 --> 문자열 길이 비교 후, 큰 문자열을 이용하여 새로운 문자열을 만듭니다.
뒤에서부터 (작은 문자열 길이 - 1) 위치를 0 대신 1 저장.
예를 들어, 1000 + 10인 경우, A[0] = 1, A[1] = 0, ..., A[3] = 0입니다.
여기서 B의 길이는 2이므로, A[3 - B.length -1] = 1로 저장하면, + 연산이 진행된 듯한 효과를 발휘합니다.
*의 경우,
A 혹은 B의 문자열 길이가 1인 경우, 긴 문자를 그대로 반환합니다.
A, B 모두 문자열 길이가 1이 아닌 경우, 즉 1이 아닌 경우에는
StringBuilder에 1을 먼저 저장하고, (A.length-1) + (B.length-1)만큼 반복하며 0을 붙여넣습니다.
이는 10^3 * 10^2 = 10^5 --> 0 최종 5개가 붙는 성질을 이용한 것입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
char[] input1 = bfr.readLine().toCharArray();
int inputLength1 = input1.length;
String op = bfr.readLine();
char[] input2 = bfr.readLine().toCharArray();
int inputLength2 = input2.length;
StringBuilder result = new StringBuilder();
if (op.equals("+")) {
if (inputLength1 == inputLength2) {
input1[0] = '2';
for (char c : input1) {
result.append(c);
}
} else {
if (inputLength1 > inputLength2) {
input1[(inputLength1 - 1) - (inputLength2 - 1)] = '1';
for (char c : input1) {
result.append(c);
}
} else {
input2[(inputLength2 - 1) - (inputLength1 - 1)] = '1';
for (char c : input2) {
result.append(c);
}
}
}
} else {
if (inputLength1 == 1 || inputLength2 == 1) {
if (inputLength1 > inputLength2) {
for (char c : input1)
result.append(c);
} else {
for (char c : input2)
result.append(c);
}
} else {
result.append(1);
for (int i = 0; i < inputLength1 + inputLength2 - 2; i++)
result.append(0);
}
}
System.out.println(result.toString());
bfr.close();
}
}