본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - -2진수 (2089)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - -2진수 (2089)

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - -2진수 (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

[ 문제 ]

-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, 11011, 11000, 11001 등이다.

10진법의 수를 입력 받아서 -2진수를 출력하는 프로그램을 작성하시오.

[ 입력 ]

첫 줄에 10진법으로 표현된 수 N이 주어진다.

[ 출력 ]

-2진법 수를 출력한다.

 


[ 코드 ]

#include<iostream>
using namespace std;


void func(int n) {

	if (n ==0)
	{
		return; // 현재의 함수를 빠져나가라
	}
	if (n%2==0)
	{
		func(-(n / 2));
		cout << 0; // 함수를 빠져나오면서 거꾸로 출력됨.
	}
	else
	{
		if (n>0)
		{
			func(-(n / 2));
		}
		else
		{
			func((-n + 1) / 2);
		}
		cout << 1; // 함수를 빠져나오면서 거꾸로 출력됨.
	}
}


int main() {
	int n;
	cin >> n;

	if (n==0)
	{
		cout << "0";
		return 0;
	}
	
	func(n);
	
	return 0;
}

* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형