A questão do preenchimento com zeros, foi como expliquei, é para ficar mais claro não tem sentido você usar bits "avulsos" já q a cada 8 bits temos 1 byte, o comum é sempre representarmos,independente se existe só 1 bit, com 8 bits tipo: 00000001 == 1 01000000 = 64 Segue código sem inverter, montando na recursão.
#include <iostream>#include <algorithm>#include <vector>using namespace std;void itob(short n,vector<int> &binary);int main(){short n;vector <int> binary;cin>>n;itob(n, binary);if(binary.size() < 8){ //AQUI, SE não QUISER REPRESENTAR UM BYTE, é só COMENTAR ESTE TRECHOwhile(binary.size() < 8)binary.insert(binary.begin(),0);}//reverse(binary.begin(),binary.end());for(int i = 0; i < binary.size(); i++){cout<<binary.at(i)<<" ";}return 0;}void itob(short n,vector<int> &binary){if(n == 1){binary.push_back(1);return;}if(n > 0 ){if(n % 2 == 0){itob(n/2,binary);binary.push_back(0);}else{itob(n/2,binary);binary.push_back(1);}}return;}