Baekjoon Online Judge
문제
8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.
입력
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
출력
첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.
예제 입력 | 예제 출력 |
314 | 11001100 |
풀이
#include <iostream>
#include <bitset>
#include <string>
using namespace std;
int main() {
// 입력
string s;
cin >> s;
// 입력한 값이 0일 때
if (s == "0")
cout << 0;
else {
for (int i = 0; i < s.length(); i++) {
// 2진수로 변환
string num = (bitset<3>((int)s[i])).to_string();
// 출력
if (i == 0) {
int n = stoi(num);
cout << n;
}
else
cout << num;
}
}
return 0;
}
숫자를 string으로 받은 뒤 for문을 이용해서 숫자의 맨 앞부터 하나씩 2진수로 바꿨다. 입력한 값이 8진수이기에 bitset을 통해 3자리 2진수로 변환해서 stirng 변수에 저장했다.
가장 맨 앞의 숫자를 2진수로 변환한 값에 001이나 010처럼 0이 앞부분에 포함된 경우 1, 10으로 출력되어야 하므로 i가 0인 경우 변수를 int로 변환해서 필요없는 0을 제거한 뒤 출력했다.
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 주사위 1233번 (0) | 2022.04.29 |
---|---|
[Baekjoon/C++] 이상한 곱셈 1225번 (0) | 2022.04.29 |
[Baekjoon/C++] 운동 1173번 (0) | 2022.04.29 |
[Baekjoon/C++] 농구 경기 1159번 (0) | 2022.04.29 |
[Baekjoon/C++] 적어도 대부분의 배수 1145번 (0) | 2022.04.21 |