문제 링크: https://www.acmicpc.net/problem/1373
2진수를 8진수로 바꿔서 출력하는 문제입니다. 2진수는 뒤에서부터 3개씩 묶으면 바로 8진수가 됩니다.
예를 들어 \(10010101_{(2)}\)를 8진수로 바꾼다고 생각해 봅시다. 맨 뒤 3자리를 8진수로 바꾸면
\begin{align}
{\color{red}1} {\color{blue}0} {\color{lime}1} _{(2)} &= {\color{red}1} \times 2^2 + {\color{blue}0} \times 2^1 + {\color{lime}1} \times 2^0 \\
&= 5_{(8)}
\end{align}
이렇게 됩니다. 나머지 자릿수도 동일하게 하면 됩니다.
구현할 때는 뒤에서부터 변환하면 어딘가에 쌓아두고 나중에 뒤집거나 해야되기 때문에 앞에서부터 변환하는데 2진수의 길이를 재서 길이를 3으로 나눴을 때 나머지가 1이면 앞에 한 칸, 2면 두칸만큼 따로 변환을 했습니다.
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
string s;
cin >> s;
int sz = s.size();
if (sz % 3 == 1) {
cout << s[0];
}
else if (sz % 3 == 2) {
cout << (s[0]-'0')*2 +(s[1]-'0');
}
for (int i = sz % 3; i < sz; i += 3) {
cout << (s[i] - '0') * 4 + (s[i + 1] - '0') * 2 + (s[i+2] - '0');
}
cout << '\n';
return 0;
}
소스입니다.
반응형
'Online Judge > 백준' 카테고리의 다른 글
[백준][C++] 17825: 주사위 윷놀이 (0) | 2020.05.12 |
---|---|
[백준][C++] 13458: 시험 감독 (0) | 2020.05.11 |
[백준][C++] 17087: 숨바꼭질 6 (0) | 2020.04.10 |
[백준][C++] 9613: GCD 합 (0) | 2020.04.10 |
[백준][C++] 2004: 조합 0의 개수 (0) | 2020.04.10 |