Python中有很多便捷的函数,例如进制转换中bin()函数、oct()函数、hex()函数。
那么要自定义它们怎么办?
众所周知,十进制转其他进制,原理是不断除其取余知道结束,最后倒序输出即可,那么栈的先进后出机制正好可以派上用场~~~
目录
十进制转二进制:
from pythonds.basic import Stack #这句蛮重要的,勿忘
def divideBy2(decNumber):
remstack = Stack()
while decNumber > 0:
rem = decNumber % 2
remstack.push(rem)
decNumber //= 2
binString = ""
while not remstack.isEmpty():
binString += str(remstack.pop())
return binString
n = int(input())
print(f"0b{divideBy2(n)}")
十进制转八进制:
from pythonds.basic import Stack
def divideBy8(decNumber):
remstack = Stack()
while decNumber > 0:
rem = decNumber % 8
remstack.push(rem)
decNumber //= 8
octString = ""
while not remstack.isEmpty():
octString += str(remstack.pop())
return octString
n = int(input())
print(f"0o{divideBy8(n)}")
十进制转十六进制:
from pythonds.basic import Stack
def divideBy16(decNumber):
remstack = Stack()
sixteen = ['A','B','C','D','E','F']
while decNumber > 0:
rem = decNumber % 16
if rem > 9:
rem = sixteen[rem - 10]
remstack.push(rem)
decNumber //= 16
hexString = ""
while not remstack.isEmpty():
hexString += str(remstack.pop())
return hexString
n = int(input())
print(f"0x{divideBy16(n)}")
总结:
哦!每一个进制都要一个独立的代码,有点繁琐了。那只用一份代码完成以上三种的转换呢?
from pythonds.basic import Stack
def convert(decNumber, base):
num = "0123456789ABCDEF"
remstack = Stack()
while decNumber > 0:
rem = decNumber % base
remstack.push(rem)
decNumber //= base
binString = ""
while not remstack.isEmpty():
binString += num[remstack.pop()]
return binString
n, m = map(int,input().split())
if m == 2:
print(f"0b{convert(n, m)}")
elif m == 8:
print(f"0o{convert(n, m)}")
else:
print(f"0x{convert(n, m)}")