C++ - Decimaal naar binair omzetten

Ik schreef een 'simpel' (het kostte me 30 minuten) programma dat decimale getallen omzet in binaire. Ik ben er zeker van dat er een veel eenvoudiger manier is, dus kun je me die laten zien? Hier's de 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;
}

Het is trouwens ingewikkeld maar ik heb mijn best gedaan.

edit - Hier is de oplossing die ik uiteindelijk heb gebruikt:

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] heeft een .to_string() methode die een std::string retourneert met een tekst representatie in binair, met leading-zero padding.

Kies de breedte van de bitset zoals nodig voor je data, bijvoorbeeld std::bitset om strings van 32 karakters te krijgen uit 32-bits gehele getallen.


#include 
#include 

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

Een int variabele is niet in decimaal, het is in binair. Wat je zoekt is een binaire string-representatie van het getal, die je kunt krijgen door een masker toe te passen dat individuele bits filtert, en ze dan af te drukken:


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

Je wilt iets doen zoals:


cout > a1;
cout 
Commentaren (1)