如何将表示二进制的int向量转换为表示十进制数的int向量? C ++

时间:2011-01-24 00:21:32

标签: c++ vector binary decimal

我正在创建一个大整数库,我有一个int的STL向量,表示二进制数。

二进制向量包含{0,0,1,1} 我需要将这个数字的十进制表示存储在另一个这样的矢量中 {2,1}

我想知道的是最好的方法是什么?

此外,我不能使用像pow这样的功能,因为这需要使用大数字。

3 个答案:

答案 0 :(得分:4)

最直接的方法是通过模拟十进制加法简单地将每个2次幂的十进制表示相加。

你可以迭代地得到每个2次幂的十进制表示,即pow(2,n + 1)= pow(2,n)+ pow(2,n)。

所以基本上,一旦你有十进制加法钉,一切都应该很容易。这可能不是最有效的方法(它的数字是 O(n ^ 2)),但它肯定有效。

答案 1 :(得分:2)

Knuth的“计算机编程艺术”第2卷是任意精度算术的优秀参考。

获得基数10表示的一种简单方法是将数字连续除以10,每个除法提取一个数字(余数)。这显然需要能够在你已有的基础上除以10。

例如,如果你的数字是321十进制或101000001二进制,我们可以划分:

10100001二进制1010二进制

100000,余数为1(所以第一个数字是1个小数)

将100000除以1010二进制

11,余数为10(所以下一个数字是2位小数)

将11除以1010二进制

0,余数为11(所以最后一位是3位小数)

根据:http://people.cis.ksu.edu/~rhowell/calculator/comparison.html这是Sun的Java BigInteger类中使用的基数转换算法,并且是O(n ^ 2)复杂度。该链接中的作者已经实现了基于Knuth p中描述的算法的O(n logn)算法。 592并归功于A.Shönhage。

答案 2 :(得分:-3)

类似的东西:

int a;
int temp;
a = 21;
vector<int> vet;

while(a>0)
{
temp = a % 10;
vet.push_back(temp);
a = a/10;
}