对于字符串的转换,不使用python库的情况下,可利用先确定最高位,进而一次往下判断其余位数,例如271.先判断最高位位于十六进制第几位,再判断为多少,16*16=256,所以位于第三位,大小为1,进而判断下一位,271-256=15,位于第一位,所以为0x10f
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 10 15:01:14 2020
@author: 11704
"""
def cishu(data):
i = 0
while True:
if data < 16:
return 0
break
if data <16**(i+1) and data >= 16**i:
return i
break
else:
i += 1
def weishu(data1,n):
i1 = 1
while True:
if data1 < 16:
return data1
break
if data1 >= 16**n*i1 and data1 < 16**n*(i1+1):
return i1
break
else:
i1 += 1
def main():
a = int(input())
e = 0
if a < 0:
a = -a
e=1
b = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f']
c = cishu(a)
d = weishu(a,c)
out = [0]*(c+1)
str1 = ''
while True:
out[c] = b[d]
a = a - 16**c*d
if a == 0:
break
c = cishu(a)
d = weishu(a,c)
out.reverse()
for i in range(len(out)):
str1 = str1 + str(out[i])
if e == 0:
print('0x{}'.format(str1))
else:
print('-0x{}'.format(str1))
if __name__ == '__main__':
main()
另外一种简洁的方法:直接进行相除,a为需要进行转换的数,程序中b为输入的相应进制数。
def main():
a,b = map(int,input().split())
out = []
stri = ''
list1 = ['A','B','C','D','E','F']
while True:
out.append(a%b)
if a%b == 0:
a = int(a/b)
else:
a = int(a//b)
if a == 0:
break
for i in out[::-1]:
if i >= 10:
i = list1[i-10]
stri = stri + str(i)
print(stri)
if __name__=='__main__':
main()