gpt4 book ai didi

c++ - 将二进制整数 vector 转换为数字 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:29:44 25 4
gpt4 key购买 nike

所以我在类作业上遇到了麻烦。目标是获取长度为 n 的 vector ,其中仅填充二进制整数(0 或 1)。前任。 [1,1,0,1] 其中 v[0] = 1,v[1] = 1,v[2] = 0,v[3] = 1。函数 ItBin2Dec 的输出输出一个数字 vector ,表示同一个整数。所以 [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;
}

自从我不得不编写任何代码以来已经有一段时间了,所以我有点生疏了。显然我还没有用实际输入设置它,只是想先得到骨架。实际作业要求二进制数字 vector 相乘,然后输出结果数字 vector ,但我想我会先从这个开始,然后从那里开始工作。谢谢!

最佳答案

将一个数从二进制转换为十进制很容易,所以我建议您先计算十进制数,然后再获取数字的位数:

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));
}

关于c++ - 将二进制整数 vector 转换为数字 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com