정답
그것이 Python의 아름다움입니다. 많은 일반적인 작업이 이미 구현되어 있습니다. 이것이 바로 그러한 경우입니다.
내장 된 bin()
함수를 사용할 수 있습니다. 다음은 Python이 제공하는 bin()
에 대한 설명입니다.
정수를 이진 문자열로 변환합니다. 결과는 유효한 Python 표현식입니다. x 가 Python int
객체가 아닌 경우 \_\_index\_\_()
메서드는 정수를 반환합니다.
사용하려면 음수가 아닌 정수를 전달하면됩니다. 다음은 몇 가지 사용 예입니다.
>>> bin(0)
"0b0"
>>> bin(12)
"0b1100"
>>> bin(25)
"0b11001"
>>> bin(250)
"0b11111010"
>>> bin(2440)
"0b100110001000"
하지만 학습 목적으로 10 진수에서 2 진수로 변환하는 자체 함수를 구현하고 싶을 수도 있습니다. 이 경우 내가 사용한 알고리즘에 대한 설명과 구현은 다음과 같습니다.
def decimal\_to\_binary(decimal):
""" Given a whole, decimal integer,
convert it to a binary
representation
"""
# I"m only making this function support
# non-negative, whole integer only.
if not isinstance(decimal, int) or decimal < 0:
raise TypeError("Input must be a non-negitive, whole integer.")
# we need a stack to store each binary digit in.
stack = []
# while their are still digits left
# to convert in decimal.
while decimal > 0:
# caclute each binary number by dividing decimal
# by two. And since we are "building" our binary
# string backwards, insert() in the front of the
# list instead of append()-ing to the back.
stack.insert(0, str(decimal \% 2))
# after we"ve calcute the binary value of the current
# decimal, divide the decimal by 2. But make sure we
# use // instead of / to get a while number!
decimal = decimal // 2
# join() together each value in stack, and return
# the finished binary string. Note: I simply
# added the "0b" prefix because that is how Python
# prepends its binary strings. If you don"t perfer that,
# then simply remove the "0b" + part from bellow.
return "0b" + "".join(stack)
테스트 및 사용 :
>>> bin(0) == decimal\_to\_binary(0)
True
>>> bin(12) == decimal\_to\_binary(12)
True
>>> bin(25) == decimal\_to\_binary(25)
True
>>> bin(250) == decimal\_to\_binary(250)
True
>>> bin(2440) == decimal\_to\_binary(2440)
True
답변
Dripto Biswas가 제공하는 솔루션은 확실히 가장 빠릅니다. 그러나 알고 싶은 경우를 대비하여 대체 솔루션이 있습니다. 🙂
방법 # 2
>>> format(5, "b")
"101"
방법 # 3
>>> "{0:b}".format(5)
"101"
이제 다시 변환하려면
>>> int("101", 2)
5