我正在创建一个大整数库,我有一个int的STL向量,表示二进制数。
二进制向量包含{0,0,1,1} 我需要将这个数字的十进制表示存储在另一个这样的矢量中 {2,1}
我想知道的是最好的方法是什么?
此外,我不能使用像pow这样的功能,因为这需要使用大数字。
答案 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;
}