백준 1373. 2진수 8진수
알고리즘 기초 문제 중 수학1 연습 문제(301)
1. 간단 설명
2진수가 주어졌을 때, 8진수로 변환하는 문제
예시
2진수 11001100 가 주어지면, 8진수 314로 변환하여 출력한다
2. 문제 분석
필요 변수
주어지는 수의 길이는 100만을 넘지 않는다
즉 2^1,000,000 까지 가능하단 말인데, 이는 정수형으로 처리가 불가능하다
이를 위해선 숫자를 입력받는 동시에 처리해주어야하므로 문자열로 입력받는다
알고리즘
1
2
3
4
5
1. 문자열로 2진수를 입력받는다
2. 8진수로 변환하기 위해 3글자씩 끊어야 하므로, 입력 문자열의 수를 확인한다
2-1. 3개씩 나누어 떨어지지 않는다면 앞에 0을 추가한다
3. 3글자씩 잘라 확인한다
3-1. 첫째 자리는 4를 곱하고, 둘째 자리는 2를 곱하고, 마지막 자리는 1을 곱한 값을 출력한다
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
cin >> input;
while (input.size() %3 != 0) {
input = '0' + input;
}
for (int i = 0; i < input.size(); i += 3) {
int num = (input[i] - '0') * 4 + (input[i+1] - '0') * 2 + (input[i+2] - '0') * 1;
cout << num;
}
return 0;
}
- 처음에
bitset
을 이용하여 도전했다가 털렸다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <bitset>
using namespace std;
int main() {
bitset<8> bit;
cin >> bit;
int n = bit.to_ulong();
cout << std::oct << n;
return 0;
}
간단하게 bitset을 이용해 2진수를 10진수로, 이를 8진수로 변환해 출력하는 방법을 사용했는데,
입력값이 100만 미만의 수인줄 알았으나, 무지막지하게 큰 수 였음
항상 문제를 잘 읽어 볼 것!
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.