问题
实现大数,远远超过python能表示的整数,比如有上百位整数,到2-16进制的转换.
解决思路
讲大数存在字符串,从大数的最高位开始,依次到最低位,每一位取出来转换成整数,对进制x进行整除和取余,将商保存在字符串中,将余数*10加上大数的下一位作为新的被除数,以此类推,直到大数取完为止。得到了整个大数一次的商和余数,再用迭代相除法,直到商为0停止,记录每次的余数,即可算出转换之后的进制。参考python十分简单实现十进制到任意进制的转换
代码
def f(n,x):
#n为待转换的大数,全部是整数,并且用字符串保存,x为进制,取值为2-16
a=[0,1,2,3,4,5,6,7,8,9,'A','b','C','D','E','F']
b=[]
while True:
jinwei=0
shang=''
for i in n:
beichushu=int(i)+jinwei*10
s=beichushu//x
y=beichushu%x
shang=shang+str(s)
jinwei=int(y)
b=b+[jinwei]
if int(shang)==0:
break
n=shang
b.reverse()
for i in b:
print(a[i],end='')
print('('+str(x)+'x)')
f('10241111111111111111111111111111111111',16)
执行结果
7b45DC2E7C081bAAE2CD8b5C71C71C7(16x)
来自:鉏飞祥,安徽大学