将二进制整数向量转换为数字向量

时间:2013-09-21 23:43:05

标签: c++ algorithm binary decimal

所以我在上课时遇到了麻烦。目标是采用长度为 n 的向量仅填充二进制整数(0或1)。防爆。 [1,1,0,1]其中v [0] = 1,v [1] = 1,v [2] = 0,v [3] = 1.函数ItBin2Dec的输出输出一个数字向量相同的整数。所以[1,1,0,1] => [1,3](13)。我不是一个优秀的程序员,所以我试着按照给我们的算法。任何建议都将不胜感激。

/* Algorithm we are given

function ItBin2Dec(v)
Input: An n-bit integer v >= 0 (binary digits)
Output: The vector w of decimal digits of v

Initialize w as empty vector
if v=0: return w
if v=1: w=push(w,1); return w
for i=size(v) - 2 downto 0:
  w=By2inDec(w)
  if v[i] is odd: w[0] = w[0] + 1
return w

*/

#include <vector>
#include <iostream>

using namespace std;

vector<int> ItBin2Dec(vector<int> v) {
    vector<int> w; // initialize vector w
    if (v.size() == 0) { // if empty vector, return w
        return w;
    }
    if (v.size() == 1) { // if 1 binary number, return w with that number
        if (v[0] == 0) {
            w.push_back(0);
            return w;
        }
        else {
            w.push_back(1);
            return w;
        }
    }
    else { // if v larger than 1 number
        for (int i = v.size() - 2; i >= 0; i--) {
            w = By2InDec(w); // this supposedly will multiply the vector by 2
            if (v[i] == 1) { // if v is odd
                w[0] = w[0] + 1;
            }
        }
    }
    return w;
}

vector<int> By2InDec(vector<int> y) {
    vector<int> z;
    // not sure how this one works exactly
    return z;
}

int main() {
    vector<int> binVect; // init binary vect
    vector<int> decVect; // init decimal vect

    decVect = ItBin2Dec(binVect); // calls ItBin2Dec and converts bin vect to dec vect
    for (int i = decVect.size(); i >= 0; i--) { // prints out decimal value
        cout << decVect[i] << " ";
    }
    cout << endl;



    return 0;
}

已经有一段时间了,因为我不得不对任何代码进行编码,所以我有点生疏了。显然我还没有用实际输入来设置它,只是试图先获得骨架。实际的赋值要求二进制数字的向量相乘,然后输出结果的数字向量,但我想我先从这开始,然后从那里开始工作。谢谢!

1 个答案:

答案 0 :(得分:1)

将数字从二进制转换为十进制很容易,所以我建议你先计算十进制数,然后再得到数字的数字:

int binary_to_decimal(const std::vector<int>& bits)
{
    int result = 0;
    int base = 1;

    //Supposing the MSB is at the begin of the bits vector:
    for(unsigned int i = bits.size()-1 ; i >= 0 ; --i)
    {
        result += bits[i]*base;
        base *= 2;
    }

    return result;
}

std::vector<int> get_decimal_digits(int number)
{
    //Allocate the vector with the number of digits of the number:
    std::vector<int> digits( std::log10(number) - 1 );

    while(number / 10 > 0)
    {
        digits.insert( digits.begin() , number % 10);
        number /= 10;
    }

    return digits;
}


std::vector<int> binary_digits_to_decimal_digits(const std::vector<int>& bits)
{
    return get_decimal_digits(binary_to_decimal(bits));
}