728x90
SMALL
아이디어
풀면서 재밌었던 구현 문제다.
숫자가 최대 100자리까지 주어진다고 했으므로 우리가 알고 있는 일반적인 변수크기로는 택도 없다.
따라서 string으로 a, b 변수를 만들고 어떻게 연산할 것인지 고민해보자.
우선 곱셈은 간단하다.
곱셈은 자릿수끼리의 덧셈이므로 string a와 b의 size(또는 length)의 덧셈만큼 0을 출력하면 된다.
덧셈에서는 경우의 수가 세가지이다
1. a > b
2. a < b
3. a == b
1. 의 경우 a.size() - b.size() - 1만큼 자릿수(0)를 출력한다.
2. 의 경우도 1과 마찬가지이다.
3. 의 경우는 "2"를 출력하고 수의 자릿수 -1만큼 "0"을 출력하면 된다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
using ll = long long;
const int INF = 1e8;
const int MAX = 500003;
string a,b;
char c;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> a >> c >> b;
if (c == '*') { // 곱셈
cout << "1";
for (int i = 0; i < a.size() + b.size() - 2; i++) {
cout << "0";
}
}
else { // 덧셈
if (a.size() > b.size()) { // case 1
cout << "1";
for (int i = 0; i < a.size() - b.size() - 1; i++) {
cout << "0";
}
cout << "1";
for (int i = 0; i < b.size() - 1; i++) {
cout << "0";
}
}
else if (a.size() < b.size()) { // case 2
cout << "1";
for (int i = 0; i < b.size() - a.size()- 1; i++) {
cout << "0";
}
cout << "1";
for (int i = 0; i < a.size() - 1; i++) {
cout << "0";
}
}
else { // case 3
cout << "2";
for (int i = 0; i < a.size()-1; i++) {
cout << "0";
}
}
}
return 0;
}
728x90
LIST
'PS > BOJ' 카테고리의 다른 글
백준 1005 (C++) ACM Craft (0) | 2021.10.27 |
---|---|
백준 17608 (C++) 막대기 (0) | 2021.10.23 |
백준 20040 (C++) 사이클 게임 (0) | 2021.10.19 |
백준 11403 (C++) 경로 찾기 (0) | 2021.10.18 |
백준 1939 (C++) 중량제한 (메모리 초과 -> 4496KB, 시간-32ms) (0) | 2021.10.15 |