I just started c++ and programming and need some major help. I am trying to convert binary to decimal. I have searched through everything and its all to hard for me to understand,and uses terms ive never seen.

I need to convert the binary to dec, using % and / and only unsigned numbers.

Does anybody have suggestions. I need help to type in "1000101" seperate it into digits and then assign that digit its decimal number. It needs to be simple again I amvery new and the stuff on here seems to advanced for me.

5
Contributors
11
Replies
12
Views
11 Years
Discussion Span
Last Post by WaltP

OK, so which step of
- seperate it into digits
- and then assign that digit its decimal number
is confusing you?

I read in the binary form "011010"
I having trouble getting it into digits, and assigning that digit the value in decimal form.

I can only use unsign, % and / ...

I am getting down how to divide into digits using %10, but i cant assign it the decimal form.

this is as far as i have as to seperating it into digits, I dont know where to begin to take that digit, then assign it the decimal value

``````#include <iostream>

using namespace std;
int main()
{
int num;
cout<<"Enter a Number : ";
cin>>num;

for(; num ; num/=10)
cout<<num%10<<endl;

system("pause");
}``````

I read in the binary form "011010"

As a string or a number?

I having trouble getting it into digits,

This depends on the answer above.

and assigning that digit the value in decimal form.

Explain what decimal form means -- with an example.

It would really help if you posted your code so we know what you're doing. Most of the terms you use have multiple meanings and/or are ambiguous and/or used incorrectly so your meaning is vague. Read this.

No, not as a string number,

I need to enter a binary "111" and have the output be equal 7...

What I mean by decimal form is i need to convert the binary number to the decimal number that us ut equivilant too. The only code I really have is what I posted above. Where I seperated the number into digits. I dont know how to take those binary digits and give them the decimal.

I dont know if this will help or not. It is homework and ive spent 2 days on it getting absolutely no where. the teacher never even explained how to use modulus, and I am really really stuck trying to figure it out.

Write a program that reads in an unsigned integer containing only 0s and 1s (i.e. a "binary" integer) and outputs its decimal equivalent. Use the modulus and division operators to pick off the "binary" number's digits one at a time from rigiht to left.Your program must accept only (unsigned) "binary"integers containing only 0s and 1s. Do not read in the integer as a string object. Use a loop to validate the input: the user should get stuck entering a "binary" integer if the value entered is not of the right form.

You can't read 01001001 as an integer using say cin >> myInt; It will seem to work, but it doesn't give you an answer you can use.

``````#include <iostream>
#include <string>
using namespace std;

int main ( ) {
string line;
getline(cin,line);
cout << line << endl;
for ( int i = 0 ; i < line.length(); i++ ) {
cout << line[i] << endl;
}
return 0;
}

\$ ./a.exe
[B]100111001
[/B]100111001
1
0
0
1
1
1
0
0
1``````
``````#include <iostream>
using namespace std ;

// is every decimal digit of number a 0 or 1
bool is_every_digit_zero_or_one( unsigned int number )
{
while( number > 0U )
{
if( number%10U > 1U )return false ;
number /= 10U ;
}
return true ;
}

// read in an unsigned int containing only decimal digits 0 and 1
// user should get stuck entering a "binary" integer if the value
// entered is not of the right form
{
unsigned int number ;
// cin >> skipws >> dec ; // being safe, ignore this for now
do
{
cout << "number? " ;
// also ignore cin.clear/cin.ignore; by spec. user should get 'stuck'!
cin >> number ;
}while( !is_every_digit_zero_or_one( number ) ) ;

return number ;
}

int main()
{
unsigned int n = read_in_number() ;
cout << "number (binary digits; leading zeroes omitted): " << n << '\n' ;
// 'convert' number to decimal, and print out the value
}``````

some questions concerning the code you provided::

``````// cin >> skipws >> dec ; // being safe, ignore this for now
//***you add this, just for the case that the default input is other than decimal? is this possible?

// also ignore cin.clear/cin.ignore; by spec. user should get 'stuck'!
//***if i add cin.clear() i don't get any different behaviour...what is the difference?``````

> ..default input is other than decimal? is this possible?
yes, look up ios_base::fmtflags

> if i add cin.clear() i don't get any different behaviour...what is the difference?
clear() merely sets sets the state to a good state. if the stream is already in a good state, there would be no difference. if the stream is not in a good state, it would make a difference

``````#include <iostream>
#include <string>
#include <sstream>
#include <cassert>
using namespace std ;

int main()
{
string input = "0101 \n 0101 \n 0101 \n *&^%\$ \n 0101 \n" ;
istringstream stm(input) ;
streambuf* buff = cin.rdbuf( stm.rdbuf() ) ;

int i ;
cin >> i ;
cout << "default input (decimal): " << i << '\n' ;
cin >> oct >> i ; cout << "octal input: " << i << '\n' ;
cin >> hex >> i ; cout << "hex input: " << i << '\n' ;
cin >> dec >> i ; // fails, cin is now not in a good state
assert( !cin ) ; // next char in buffer is '*'
cin.clear() ; // reset the state of cin to good
cout << "next char in input is: '" << char( cin.peek() ) << "'\n" ;
cin.ignore(100,'\n') ; // remove chars (max 100) upto next newline
cout << "next char in input is: '" << char( cin.peek() ) << "'\n" ;
assert( cin >> dec >> i ) ; // ok
cout << "decimal input: " << i << '\n' ;
cin.rdbuf( buff ) ; // restore cin's original streambuf
}
/**
>g++ -Wall -std=c++98 input.cc && ./a.out
default input (decimal): 101
octal input: 65
hex input: 257
next char in input is: '*'
next char in input is: ' '
decimal input: 101
*/``````

OK, based on what you told us, you define an integer (say binary) and you enter only 1's and 0's into the variable. Your binary value is really read into a decimal variable, but contains only 1's and 0's.

Zero out another variable (say decimal) to hold the decimal value.

Next, using the % operator, get the each digit (a 1 or 0) and multiply each by the proper power of 2 and add it to the decimal variable.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.