Baekjoon Online Judge
문제
2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.
입력
첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.
| 예제 입력 | 예제 출력 |
| 11001100 | 314 |
풀이
#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string n; // 2진수
cin >> n;
string num8 = ""; // 8진수
// 진수 변환
for (int i = n.length() - 1; i >= 0; ) {
int sum = 0;
// 2진수를 3개씩 쪼개서 진수 변환
for (int j = 0; j < 3; j++) {
if (i < 0) break;
int num2 = n[i] - '0';
sum += num2 * pow(2, j);
i--;
}
// 변환한 수 합치기
num8.append(to_string(sum));
}
// 문자열 뒤집기
reverse(num8.begin(), num8.end());
// 출력
cout << num8 << endl;
return 0;
}
int로는 수의 길이가 1,000,000일 수도 있는 2진수를 모두 받지 못하기에 string으로 입력받았다. 그리고 입력한 2진수를 맨 뒤부터 3개씩 잘라서 8진수로 변환했다.
ex)
11001100 > 011 001 100 > 0*2^2 + 1*2^1 + 1*2^0 0*2^2 + 0*2^1 + 1*2^0 1*2^2 + 0*2^1 + 0*2^0 > 3 1 4
수의 맨뒤부터 변환하는 것이기에 8진수로 변환한 결과를 저장하는 변수 num8은 답이 뒤집힌 상태이므로 reverse()로 변수를 한번 뒤집은 다음에 답을 출력했다.
'백준 > C++' 카테고리의 다른 글
| [Baekjoon/C++] 1392번 - 노래 악보 (0) | 2022.05.30 |
|---|---|
| [Baekjoon/C++] 1384번 - 메시지 (0) | 2022.05.30 |
| [Baekjoon/C++] 1371번 - 가장 많은 글자 (0) | 2022.05.21 |
| [Baekjoon/C++] 1362번 - 펫 (0) | 2022.05.21 |
| [Baekjoon/C++] 1357번 - 뒤집힌 덧셈 (0) | 2022.05.21 |
