


-2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 2, 2, 2,
2이 표현 되지만 -2진법에서는 (-2) = 1, (-2) = -2, (-2) = 4, (-2) = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 11011, 11000, 11001 등이다.
10진법의 수를 입력 받아서 -2진수를 출력하는 프로그램을 작성하시오.
첫 줄에 10진법으로 표현된 수 N이 주어진다.
-2진법 수를 출력한다.
진법 변환의 원리를 이해하고 적용하는 문제이다.
ex)
만약 10진수 '7'을 2진수로 변환한다면,
(2 자리)
(2 자리)
(2 자리)
이므로 7 -> 111이 된다.
위와 같은 원리를 -2진수에 그대로 적용하게 되면,
ex) 예제
만약 10진수 '-13'을 -2진수로 변환한다면,
(2 자리)
(2 자리)
(2 자리)
(2 자리)
(2 자리)
(2 자리)
이렇게 -2진수를 쉽게 구할 수 있다.
n = int(input())
if n == 0:
print(0)
else:
ans = ''
while n:
if n % -2 == 0: # 나머지가 0이라면 그대로 나누기
n //= -2
ans += '0'
elif n % -2 == -1: # 나머지가 -1이라면
n -= 1 # 그냥 나누면 몫이 1만큼 작아지므로 -1한 후 나누기
n //= -2
ans += '1'
elif n % -2 == 1: # 나머지가 1이라면
n //= -2
ans += '1'
print(ans[::-1])
진법 변환하는 원리를 공부하고 풀었지만 '-'부호 때문에 자칫 잘못하면 실수하기 쉬운 문제인것 같다.
https://www.acmicpc.net/problem/2089