将非常大的int(写成字符串)转换为c / c ++中的二进制字符串

时间:2012-11-19 13:36:25

标签: c++ c

我在10号基数有一个数字,大约有10k位数。我想将它转换为base 2(1010101001 ...)。我能想到的只是原始算法:

take last digit mod 2 -> write down bit

number divide by 2;

在字符串上实施小学部门应该不难,但我认为它效率很低。如果我是对的,它将是O(l^2),其中l表示基数为10的数字长度。可以更快地完成吗?

3 个答案:

答案 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等)。