C++ - Μετατροπή από δεκαδικό σε δυαδικό σύστημα

Έγραψα ένα 'απλό' (μου πήρε 30 λεπτά) πρόγραμμα που μετατρέπει δεκαδικό αριθμό σε δυαδικό. Είμαι ΣΙΓΟΥΡΟΣ ότι υπάρχει πολύ πιο απλός τρόπος, μπορείτε να μου τον δείξετε; Ορίστε ο κώδικας:

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

Παρεμπιπτόντως, είναι πολύπλοκος, αλλά προσπάθησα να κάνω ό,τι καλύτερο μπορούσα.

edit - Εδώ είναι η λύση που κατέληξα να χρησιμοποιήσω:

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] έχει μια μέθοδο .to_string() που επιστρέφει ένα std::string που περιέχει μια αναπαράσταση κειμένου σε δυαδικό σύστημα, με συμπλήρωση με μηδενικά.

Επιλέξτε το πλάτος του bitset όπως απαιτείται για τα δεδομένα σας, π.χ. std::bitset για να λάβετε συμβολοσειρές 32 χαρακτήρων από ακέραιους αριθμούς 32 bit.


#include 
#include 

int main()
{
    std::string binary = std::bitset(128).to_string(); //to binary
    std::cout
Σχόλια (3)

Μια μεταβλητή int δεν είναι δεκαδική, είναι δυαδική. Αυτό που ψάχνετε είναι μια δυαδική συμβολοσειρά αναπαράστασης του αριθμού, την οποία μπορείτε να πάρετε εφαρμόζοντας μια μάσκα που φιλτράρει τα μεμονωμένα bit και στη συνέχεια να τα εκτυπώσετε:


for( int i = sizeof(value)*CHAR_BIT-1; i>=0; --i)
    cout 
Σχόλια (0)

Θέλετε να κάνετε κάτι τέτοιο:


cout > a1;
cout 
Σχόλια (1)