16진수 문제와 나란히 있길래, 이번에도 날로 먹을 수 없을지 고민하다가 결과 - 초기 와 같은 답을 만들었다.
하지만 문제가 있었다.
주어지는 수의 길이가 333,334까지 될 수 있다는 것.
값은 제대로 나오는 것 같은데 범위 문제인가?
머리를 싸매면서 온갖 기능들을 찾아 헤멨다.
범위를 얼마만큼 지정 해 줘야하는지 컨버터를 돌려보면서 테스트하다가
아니, 자바나 파이썬은 변환도 쉽게 할 수 있는데 왜 이렇게 복잡하지??? 라는 생각이 들었다.
약 1시간을 기능 찾아다니기만 하다가 도출한 결과.
길면 파이썬을 쓰자.
그리고 정답이었다.
파이썬을 사용하니 너무 간단해서 회의감이 들 정도로 쉽게 해결했다.
//
// Created by 전시은 on 2023/02/12.
//
// 문제 :: 8진수 2진수
// 8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.
// 입력 :: 첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
// 출력 :: 첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.
#include <iostream>
#include <cstring>
#include <string>
#include <bitset>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
string sInput, sBinary;
int nInputResult;
cin >> sInput;
char* cArray = new char[sInput.length() + 1];
strcpy(cArray, sInput.c_str());
nInputResult = strtol(cArray, NULL, 8);
if(nInputResult == 0)
{
cout << 0;
}
else
{
//itoa(nInputResult, cArray, 2);
sBinary = bitset<3333334>(nInputResult).to_string(); //to binary
auto pos = sBinary.find('1');
if(pos != string::npos)
{
string sResult = sBinary.substr(pos);
cout << sResult;
}
}
return 0;
}
print(bin(int(input(), 8))[2:])