C++ - Conversion de décimal en binaire

J'ai écrit un programme "simple" (il m'a fallu 30 minutes) qui convertit un nombre décimal en binaire. Je suis SÛR qu'il existe un moyen beaucoup plus simple, pouvez-vous me le montrer ? Voici le code :

#include <iostream>
#include <stdlib.h>

using namespace std;
int a1, a2, remainder;
int tab = 0;
int maxtab = 0;
int table[0];
int main()
{
    system("clear");
    cout << "Enter a decimal number: ";
    cin >> a1;
    a2 = a1; //we need our number for later on so we save it in another variable

    while (a1!=0) //dividing by two until we hit 0
    {
        remainder = a1%2; //getting a remainder - decimal number(1 or 0)
        a1 = a1/2; //dividing our number by two
        maxtab++; //+1 to max elements of the table
    }

    maxtab--; //-1 to max elements of the table (when dividing finishes it adds 1 additional elemnt that we don't want and it's equal to 0)
    a1 = a2; //we must do calculations one more time so we're gatting back our original number
    table[0] = table[maxtab]; //we set the number of elements in our table to maxtab (we don't get 10's of 0's)

    while (a1!=0) //same calculations 2nd time but adding every 1 or 0 (remainder) to separate element in table
    {
        remainder = a1%2; //getting a remainder
        a1 = a1/2; //dividing by 2
        table[tab] = remainder; //adding 0 or 1 to an element
        tab++; //tab (element count) increases by 1 so next remainder is saved in another element
    }

    tab--; //same as with maxtab--
    cout << "Your binary number: ";

    while (tab>=0) //until we get to the 0 (1st) element of the table
    {
        cout << table[tab] << " "; //write the value of an element (0 or 1)
        tab--; //decreasing by 1 so we show 0's and 1's FROM THE BACK (correct way)
    }

    cout << endl;
    return 0;
}

Au fait, c'est compliqué mais j'ai fait de mon mieux.

edit - Voici la solution que j'ai fini par utiliser:

std::string toBinary(int n)
{
    std::string r;
    while(n!=0) {r=(n%2==0 ?"0":"1")+r; n/=2;}
    return r;
}

[std::bitset][1] possède une méthode .to_string() qui retourne une std::string contenant une représentation de texte en binaire, avec un remplissage de zéro en tête.

Choisissez la largeur du jeu de bits en fonction de vos données, par exemple std::bitset pour obtenir des chaînes de 32 caractères à partir d'entiers de 32 bits.


#include 
#include 

int main()
{
    std::string binary = std::bitset(128).to_string(); //to binary
    std::cout
Commentaires (3)

Une variable int n'est pas en décimal, elle est en binaire. Ce que vous recherchez est une représentation en chaîne binaire du nombre, que vous pouvez obtenir en appliquant un masque qui filtre les bits individuels, puis en les imprimant :


for( int i = sizeof(value)*CHAR_BIT-1; i>=0; --i)
    cout 
Commentaires (0)

Tu veux faire quelque chose comme :


cout > a1;
cout 
Commentaires (1)