我有一个很长的整数。整数由无符号字符数组表示。
示例:带有基数10的整数1234在数组中表示为[4,3,2,1],[2,2,3,2](基数8)和[2] ,13,4](基数16)
现在我想将带有基数n的整数转换为另一个带基数m的整数。在我的追问中,我来自Wallar's algorithm,来自here。
from math import *
def baseExpansion(n,c,b):
j = 0
base10 = sum([pow(c,len(n)-k-1)*n[k] for k in range(0,len(n))])
while floor(base10/pow(b,j)) != 0: j = j+1
return [floor(base10/pow(b,j-p)) % b for p in range(1,j+1)]
起初我认为这是我的答案,但不幸的是,事实并非如此。我遇到的问题是算法计算总和。在我的情况下,这是一个问题,因为变量base10
是32位无符号整数的类型。因此,当我的整数(表示为数组)具有超过10位数时,它不能再转换该数字。有人有解决方案吗?
答案 0 :(得分:1)
这是用于做你正在尝试的学校书籍算法。您从零表示开始,并将其称为运行总计。然后,对于要转换的数字的每个数字,从最重要的数字开始,到最不重要的数字,1)将运行总数乘以源数字的基数,2)将数字加到运行总数。现在你需要的是进行乘法和加法的算法(你实际上可以同时做两个)。以下是如何做到这一点:1)将当前数字设置为变量,将其称为“进位”,2)对于新数字中的每个数字,从最低有效数字开始并进入最高有效数字:2a)将进位设置为新数字中的当前数字乘以输出基数加进位,2b)设置当前数字以携带mod输出基数,2c)设置进位进位除以输出基数。这应该做到这一点。您正在尝试在此处执行的操作实现:http://www.cis.ksu.edu/~howell/calculator/comparison.html