Question
문제링크
Silver 4
-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진수를 출력하는 프로그램을 작성하시오.
Input
첫 줄에 10진법으로 표현된 수 N이 주어진다.
-13
Output
-2진법 수를 출력한다.
110111
Logic
기본구조 : while
1. 진법 변환 계산을 하는 기본 방식과 동일하게 -2진법을 진행시킨다.
2. 2로 나눈 나머지가 0이라면 수를 -2로 나눈 나머지를 추가한다. 이때 계산은 역순으로 된다.
3. 나누어 떨어지지 않다면 몫에 1을 제하고 -2로 나눈 몫을 저장시키고, 1을 추가한다.
Code
N=int(input())
stack=[]
while(N!=0):
if N%2==0:
div,mod = divmod(N,-2)
stack.append(str(mod))
else:
div=(N-1)//(-2)
stack.append('1')
N=div
print(0) if not stack else print("".join(stack[::-1]))