Так что у меня проблемы с назначением для класса. Цель состоит в том, чтобы взять вектор длины n, заполненный только двоичными целыми числами (0 или 1). Ex. [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;
}
Прошло некоторое время с тех пор, как мне пришлось закодировать что-либо, поэтому я немного ржавый. Очевидно, я еще не определился с фактическими входами, просто попробовав сначала получить скелет. Фактическое задание запрашивает умножение векторов двоичных цифр, а затем выводит результирующий вектор цифр, но я решил, что начну с этого первого и работаю оттуда. Благодаря!
Мне нравится этот метод. Однако он не отвечает требованиям задания. Предположим, мы сможем передать ему вектор> 300 1 (до 1600), и поскольку это действительно позволяет мне вводить 32 1, это в конечном итоге переполнит и вызовет ошибки. Это то, чего хочет нас наш профессор. Я выбираю это как правильный ответ, потому что это определенно дает мне хорошее место для начала. Благодаря! – Scott