我在10号基数有一个数字,大约有10k位数。我想将它转换为base 2(1010101001 ...)。我能想到的只是原始算法:
take last digit mod 2 -> write down bit
number divide by 2;
在字符串上实施小学部门应该不难,但我认为它效率很低。如果我是对的,它将是O(l^2)
,其中l
表示基数为10的数字长度。可以更快地完成吗?
答案 0 :(得分:1)
根据我的理解,您的大数字表示为十进制数字序列。如果是这样,您可以使用乘法和加法计算“二进制”表示:
value = sum(i in 0 ... n-1)10 i * digit i
虽然我不确定你是否可以达到O(n log n)算法,但是这个计算可以用分而治的方式分成几部分。
答案 1 :(得分:1)
如果您正在处理大数字,我建议您使用多精度库。尝试GMP或MPRF或类似的东西。
-Øystein
答案 2 :(得分:1)
除以2与乘以1/2相同。对于后者,您可以使用一些众所周知的快速乘法算法(Toom-Cook,Schönhage-Strassen等)。