Justin Farr - 18 days ago 4
C++ Question

# C++ How to convert decimal number to binary?

I was tasked with writing some code that will take a user input and convert the number to its binary number. I have written some code so far, but am having one issue. I have to use a for loop and the quotient-remainder method. When I output the remainder(binary), it is not printing the last digit.

The question I'm asking is: What would I have to change in my for loop to make it print out the last digit of the binary number?

``````int main()
{
int num;
int rem;

cout << "Please enter a number: ";
cin >> num;

for (int i = 0; i <= (num + 1); i++)
{
num /= 2;
rem = num % 2;
cout << rem;
}

_getch();
return 0;
}
``````

Any help is appreciated, Thank you!

Answer

You lose the last binary number when you start your algorithm by dividing `num` by 2. To avoid this issue, you should exchange both instructions `num /= 2;` and `rem = num % 2;`

Your loop also iterates too many times: in fact you can stop when `num == 0`. The following code is not valid for inputs that are <= 0.

``````int main()
{
int num;
int rem;

cout << "Please enter a number: ";
cin >> num;

while (num != 0)
{
rem = num % 2;
num /= 2;
cout << rem;
}
cout << std::endl;

return 0;
}
``````

If you want to write it in the right order, you should first compute the log of your number in base 2. The following solution uses a number `index` that starts with '1' and that has '0' after:

``````int main()
{
int num;
int rem;

cout << "Please enter a number: ";
cin >> num;

if (num > 0) {
int index = 1;
while (index <= num)
index *= 2;
index /= 2;

do {
if (num >= index) {
cout << '1';
num -= index;
}
else
cout << '0';
index /= 2;
} while (index > 0);
cout << std::endl;
}
else
cout << '0';

cout << endl;
return 0;
}
``````
Source (Stackoverflow)
Comments