1212번 : 8진수 2진수
8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.
입력
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
출력
첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.
생각해 볼 점
우선 입력값을 보면, 수의 길이가 333,334개 일 수 있습니다.
즉, int나 long long 등 어떤 숫자 자료형을 써도 담아낼 수 없는 큰 수를 사용합니다.
따라서, 우리는 char 배열이나 string같은 문자열에 수를 담아야 합니다.
입력을 문자열에 담고, 어차피 입력값이 8진수의 형태로 들어왔다면,
8진수 -> 2진수는 다음과 같이 변환 가능합니다.
예시 ) (8진수) 7 = (2진수) 111
7 / 4 = 1 / 7 % 4 = 3
3 / 2 = 1 / 3 % 2 = 1
1
즉,
1. 8진수 N을 4로 나눈 몫
2. N을 4로 나눈 나머지를 2로 나눈 몫
3. N을 2로 나눈 나머지
세가지를 합하면 이진수가 완성됩니다.
이진수 역시 엄청 길게 나오므로, 문자열 형태로 출력합니다.
코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input;
cin >> input;
string ans = "";
for (char c : input)
{
string bin = "";
int n = c - 48;
bin += (char)((n / 4) + 48);
n %= 4;
bin += (char)((n / 2) + 48);
n %= 2;
bin += (char)(n + 48);
ans += bin;
}
int length = 0;
for (int i = 0; i < 3; i++)
{
if (ans[i] == '0') length++;
else break;
}
ans.erase(0, length);
if (ans.empty()) cout << "0";
else cout << ans;
return 0;
}
그 외
'공부 및 정리 > 백준 코드' 카테고리의 다른 글
[C++]백준 - 14725번 문제 (0) | 2021.11.22 |
---|---|
[C++]백준 - 1284번 문제 (0) | 2021.11.22 |
[C++]백준 - 1305번 문제 (0) | 2021.11.20 |
[C++]백준 - 6503번 문제 (0) | 2021.11.18 |
[C++]백준 - 4354번 문제 (0) | 2021.11.18 |