반응형
출처: https://www.acmicpc.net/problem/2935
Input
1000
*
100
Output
100000
A와 B는 10의 제곱 형태로 길이가 최대 100자리이므로 int와 long 보다는 문자열(string) 활용
10의 제곱 형태이므로 0의 개수에 관해 생각합니다.
▶ A * B의 경우
0의 개수 = {A 문자열 길이 - 1} + {B 문자열 길이 -1}
ex) 100 * 10,000 = 1000,000 ← 0의 개수 = (3 - 1) + (5 - 1) = 6
▶ A + B의 경우
- 문자열의 길이가 같은 경우는 결과가 A 혹은 B의 2배가 됩니다.
ex) 1000 + 1000 = 2000
- 문자열의 길이가 다른 경우
먼저, A와 B 중 문자열의 길이가 더 큰 숫자를 A로 둡니다.
그 후 B에서 1로 표시되어 있던 지점을 A에도 표시해준다.
ex) 100 * 10000 → 10000 * 100 → 10100
#include <iostream>
#include <string>
using namespace std;
int main() {
string A, B, result, temp;
char op;
cin >> A >> op >> B;
int aLen = A.length(), bLen = B.length();
// 곱셈 연산
if(op == '*'){
result = "1";
for(int i=0; i< aLen-1 + bLen-1; i++){
result += '0';
}
cout << result << '\n';
return 0;
}
// 덧셈 연산
if(aLen == bLen){
result = A;
result[0] = '2';
}
else{
// A = B 보다 긴 문자열 (A 길이 > B 길이)
if(aLen < bLen){
temp = A;
A = B;
B = temp;
}
result = A;
result[A.length() - B.length()] = '1';
}
cout << result << '\n';
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 2613 숫자 구슬 (0) | 2021.02.25 |
---|---|
[BOJ] 백준 6987 월드컵 (1) | 2021.02.25 |
[BOJ] 백준 2822 점수 계산 (0) | 2021.02.25 |
[BOJ] 백준 14225 부분수열의 합 (0) | 2021.02.25 |
[BOJ] 백준 10815 숫자 카드 (0) | 2021.02.25 |
댓글