B2089

개요

백준 문제 B2089번을 풀면서 어려웠던 점과 코드를 정리한다.
소요 시간 : ?
https://www.acmicpc.net/problem/2089

문제

-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진수를 출력하는 프로그램을 작성하시오.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
using namespace std;

int init()
{
int num;
cin >> num;
if(num == 0)
{
cout << 0;
}


return num;
}

void solve(int num)
{

if(num == 0)
{
return;
}

if(num % -2 == 0)
{
solve(num / -2);
cout << 0;
}
else
{
solve((num-1) / -2);
cout << 1;
}




}

int main()
{

solve(init());



}

풀이

-2진법 =
-2로 나눠서 나머지가 0이다 == 1 출력
나머지가 0이 아니다 == 0 출력
값 /= -2;
하지만 나머지가 정확히 정수가 아닌 경우에 몫이 제대로 출력안됨
따라서 (값-1) /= -2해줌

배울 점, 메모

오랫동안 풀이 방법을 생각하지 못한문제..
너무 머리나 시간을 안쓸려고하는게 아닐까

Author

Praisebak

Posted on

2021-04-01

Updated on

2021-04-01

Licensed under

Comments