코딩테스트 연습/Baekjoon
[Baekjoon] 1212번: 8진수 2진수 (c++)
수기
2022. 3. 31. 19:47
https://www.acmicpc.net/problem/1212
1212번: 8진수 2진수
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
www.acmicpc.net
1373번과 비슷한 , 8진수->2진수로 변환하는 문제다. 주어지는 수 길이는 333,334을 넘지 않으므로 8진수가 333,333 이면 x3인 2진수는 999,999개이다. 8진수->10진수->2진수를 거치게되면 1373번과 마찬가지로 담을 수 없는 범위이므로 8진수->2진수로 바로 변환하여 출력했다. 0을 제외하고 모두 1로시작해야 하므로 if(i==0 && num[i]-'0' <=3 )조건을 추가하였다.
코드
//1212
#include <iostream>
#include <string>
using namespace std;
int main(int argc, const char * argv[]) {
cin.tie(NULL);
ios::sync_with_stdio(0);
string num;
cin>>num;
string result;
for(int i=0;i<num.size();i++){
if(i==0 && num[i]-'0' <=3 ){
if(num[i]-'0'>=2) cout << (num[i]-'0')/2 << (num[i]-'0')%2;
else if(num[i]-'0'==1) cout << "1";
else if(num[i]-'0'==0) cout<< "0";
}
else if(num[i]-'0'>=4) cout << (num[i]-'0')/4 << ((num[i]-'0')%4)/2 << ((num[i]-'0')%4)%2;
else if(num[i]-'0'>=2) cout << "0" << (num[i]-'0')/2 << (num[i]-'0')%2;
else if(num[i]-'0'==1) cout << "001";
else if(num[i]-'0'==0) cout << "000";
}
return 0;
}