https://www.acmicpc.net/problem/1212
1212번: 8진수 2진수
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
www.acmicpc.net
#include <iostream>
#include <string>
#include <queue>
using namespace std;
int main()
{
string eight;
cin >> eight;//8진수를 입력받는다
queue<int> two;//2진수를 담을 queue
if (eight == "0")//입력받은 8진수가 0이면 2진수도 0
cout << 0;
for (int i = 0; i < eight.size(); i++)
{
int tmp = int(eight[i] - '0');
two.push(tmp / 4);//4로 나눈 몫 추가
tmp = tmp % 4;
two.push(tmp / 2);//2로 나눈 몫 추가
tmp = tmp % 2;
two.push(tmp);//나머지 추가
}
for(int i=0;i<3;i++)//앞에 3자리만 봤을 때
{
if (two.front() == 0)//만약 맨 앞자리가 0이면 삭제
two.pop();
else//1이면 스킵
continue;
}
while (!two.empty())//안에 있는 수를 앞부터 모두 출력
{
cout << two.front();
two.pop();
}
}
예제의 경우 8진수가 314이다
1. 3을 4로 나누면 0
2. 3을 2로 나누면 1
3. 나머지 1
이므로 queue에는 0 1 1 순서로 들어가고 8진수 뒤의 숫자인 1, 4도 위 과정을 반복한다
이 떄 다음 for문으로 queue의 front가 0일경우 pop해주고 출력하면
2진수 11001100가 출력된다.
'백준 c++ > (1-1)백준 c++ 알고리즘 기초' 카테고리의 다른 글
백준 17103 c++ 골드바흐 파티션 (0) | 2022.07.13 |
---|---|
백준 2089 c++ -2진수 (0) | 2022.07.12 |
백준 1373 c++ 2진수 8진수 (0) | 2022.07.11 |
백준 17087 c++ 숨바꼭질 6 (0) | 2022.07.07 |
백준 9613 c++ GCD합 (0) | 2022.07.07 |