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

백준 2089 c++ -2진수

현구구 2022. 7. 12. 12:19

https://www.acmicpc.net/problem/2089

 

2089번: -2진수

-2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 110

www.acmicpc.net

#include <iostream>
#include <stack>
using namespace std;

int main()
{
	long long int N;
	cin >> N;//10진수를 입력받는다
	stack<int> result;//2진수 결과를 담을 stack

	while (1)
	{
		if (N == 1)//나누기를 계속했을 때 몫이 1이면 마무리
		{
			result.push(1);
			break;
		}
		if (N == 0)//나누기를 계속했을 때 몫이 0이면 마무리
		{
			result.push(0);
			break;
		}
		if (N % -2 == 0)//-2로 나누었을때 나누어 떨어지면
		{
			result.push(0);//결과에 0넣고 -2로 나누기
			N = N / -2;
		}
		else//-2로 안 나누어 떨어질 경우
		{
			result.push(1);//결과값에 1을 넣고
			N = N - 1;//몫은 -1 해준뒤
			N = N / -2;//-2로 나눈다
		}
	}
	while (!result.empty())//stack에 담아돈 결과값 출력
	{
		cout << result.top();
		result.pop();
	}
}