문제 링크: https://www.acmicpc.net/problem/5893
최대 1000자리 수가 들어올 수 있기 때문에 정수형으로 변환하면 안되고 string이나 bitset 등을 사용해야 합니다
17배 = 16배 + 1배 이런식으로 계산하면 쉽습니다. a=(a<<4) + a 이렇게 하면 되는데 더하기는 직접 구현해야 합니다. 논리회로 시간에 했던 Full adder 기억하시죠?
물론 파이썬이면 이렇게 안해도 간단하게 풀 수 있을겁니다 (아마도)
#include <bits/stdc++.h>
using namespace std;
constexpr size_t sz = 1005;
bitset<sz> add(const bitset<sz>& a, const bitset<sz>& b) {
bitset<sz> ret;
bool carry = false;
for (auto i = 0; i < sz; ++i) {
bool sum = a.test(i) ^ b.test(i) ^ carry;
carry = (a.test(i) & b.test(i)) | (carry & (a.test(i) ^ b.test(i)));
ret.set(i, sum);
}
return ret;
}
void print(const bitset<sz>& a) {
bool flag = false;
for (int i = sz - 1; i >= 0; --i) {
if (!flag && a.test(i))
flag = true;
if (flag)
cout << a.test(i);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
bitset<sz> a, b;
cin >> a;
b = a;
a <<= 4;
print(add(a, b));
return 0;
}
출력할 때 leading zero들은 안나오게 해줘야 합니다.
반응형
'Online Judge > 백준' 카테고리의 다른 글
[백준][C++] 11051: 이항 계수 2 (0) | 2020.08.05 |
---|---|
[백준][C++] 11003: 최솟값 찾기 (0) | 2020.08.04 |
[백준][C++] 4485: 녹색 옷 입은 애가 젤다지? (0) | 2020.08.03 |
[백준][C++] 11779: 최소비용 구하기 2 (0) | 2020.08.02 |
[백준][C++] 1411: 비슷한 단어 (0) | 2020.08.01 |