백준 c++/(1-1)백준 c++ 알고리즘 기초

백준 1212 c++ 8진수 2진수

현구구 2022. 7. 12. 10:37

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