简体   繁体   中英

C++ base 10 to base 2 logic error

I am doing a basic program to convert number from base 10 to base 2. I got this code:

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

using namespace std;

int main()
{
    int num=0, coc=0, res=0, div=0;
    printf ("Write a base 10 number\n");
    scanf ("%d", &num);
    div=num%2;
    printf ("The base 2 value is:\n");
    if(div==1)
    {
        coc=num/2;
        res=num%2;
        while(coc>=1)
        {
            printf ("%d", res);
            res=coc%2;
            coc=coc/2;
        }
        if(coc<1)
        {
            printf ("1");
        }
    }
    else
    {
        printf ("1");
         coc=num/2;
        res=num%2;
        while(coc>=1)
        {
            printf ("%d", res);
            res=coc%2;
            coc=coc/2;
        }
    }
    printf ("\n");
    system ("PAUSE");
    return EXIT_SUCCESS;
}

Everything is good with certain numbers, but, if I try to convert the number 11 to base 2, I get 1101, if I try 56 I get 100011... I know is a logic problem and I am limited to basic algoritms and functions :(... any ideas?

you can use this, it is simpler and cleaner:. Use std::reverse from <algorithm> to reverse the result.

#include <algorithm>
#include <string>
using namespace std;

string DecToBin(int number)
{
    string result = "";

    do
    {
        if ( (number & 1) == 0 )
            result += "0";
        else
            result += "1";

        number >>= 1;
    } while ( number );

    reverse(result.begin(), result.end());
    return result;
} 

However even much cleaner version could be:

#include<bitset>

void binary(int i) {
    std::bitset<8*sizeof(int)> b = i;
    std::string s = b.to_string<char>();
    printf("\n%s",s.c_str());
}

using above, result of

binary(11);
binary(56);

is

00000000000000000000000000001011

00000000000000000000000000111000

or even better:

#include <iostream>

void binary(int i) {
    std::bitset<8*sizeof(int)> b = i;//assume 8-bit byte,Stroustrup "C++..."&22.2
    std::cout<<b;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM