알고리즘/백준
C++ 백준 BOJ 1212 8진수 2진수
parkkingcar
2022. 11. 15. 22:53
8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하는 문제입니다.
(난이도는 높지 않지만 출력값의 맨 앞이 0이 되는 경우, 시간초과 예외로 맨탈이..)
1212번: 8진수 2진수
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
www.acmicpc.net
#include <iostream>
#include <string>
using namespace std;
int main(){
string octal_str, binary_str = "";
cin >> octal_str;
for(int i = 0; i < octal_str.size(); i++){
switch (octal_str[i]){
case '0':
if(i == 0){
binary_str += "0";
break;
}
else{
binary_str += "000";
break;
}
case '1':
if(i == 0){
binary_str += "1";
break;
}
else{
binary_str += "001";
break;
}
case '2':
if(i == 0){
binary_str += "10";
break;
}
else{
binary_str += "010";
break;
}
case '3':
if(i == 0){
binary_str += "11";
break;
}
else{
binary_str += "011";
break;
}
case '4':
binary_str += "100";
break;
case '5':
binary_str += "101";
break;
case '6':
binary_str += "110";
break;
case '7':
binary_str += "111";
break;
}
}
cout << binary_str;
return 0;
}
2진수에서 3자리씩 끊어서 생각하면 됩니다.
예를들어 2진수로 100010001이면, 100 / 010 / 001 로 나눌 수 있습니다.
이때, 001은 1 / 010은 2 / 100은 4이므로 8진수로 124가 된다는 것을 알 수 있습니다.
+ 맨 앞에 0이 올 수 없기 때문에 첫 글자가 0일때 예외처리 해주면 됩니다.
아래 글은 진법 변환에 관한 제 블로그 글입니다.
[기초] 알고리즘 수학2
4. 진법 변환 (Base Conversion) 4-1. 10진법 수 N을 B진법으로 바꾸려면 N이 0이 될때 까지 나머지를 계속 구하면 됩니다. 예를 들어 11을 3진법으로 바꾸는 방법은 11/3 = 3 나머지는2 3/3 = 1 나머지는0 1/3 = 0
parkkingcar.tistory.com