#include<iostream>
usingnamespace std;
constint STACK_SIZE = 100;
class stack {
private:
int count; // number of items in the stack
int data[STACK_SIZE];
public:
stack();
~stack();
void push(constint item); // push an item on the stack
int pop(void); // pop item off the stack
};
stack::stack() // constructor
{
count = 0; // zero the stack
}
stack::~stack() {} // default destructor
void stack::push(constint item)
{
if (count < STACK_SIZE)
{
data[count] = item;
++count;
}
else cout << "Overflow!\n";
}
int stack::pop(void)
{
if (count >0)
{
--count;
return (data[count]);
}
else
{
cout << "Underflow!\n";
return 0;
}
}
int menu();
void toBinary();
void toOctal();
void toHex();
int main()
{
int choice = menu();
switch(choice)
{
case (0):
toBinary();
break;
case (1):
toOctal();
break;
case(2):
toHex();
break;
}
return 0;
}
int menu()
{
int choice;
cout << " *****Menu***** " << endl;
cout << "Convert the number from decimal into: " << endl;
cout << "0-Binary" << endl;
cout << "1-Octal" << endl;
cout << "2-Hexadecimal" << endl;
cin >> choice;
return choice;
}
void toBinary()
{
int num;
int total = 0;
stack reverse; // declare a local stack!!!!!!!!!!!!!!!!!!
int ctr=0; // declare a local counter!!!!!!!!!!!!!!!
cout << "Please enter a decimal: ";
cin >> num;
cout << "The decimal number " << num << " converts to the binary number: ";
while(num > 0)
{
total = num % 2;
num /= 2;
//cout << total << " ";
reverse.push(total); // save to stack instead of printing!!!!!!!!!
ctr++; // count the number of digits saved!!!!!!!!!!!!
}
while (ctr > 0)
{
cout << reverse.pop() << " ";
ctr--;
}
}
void toOctal()
{
int num;
int total = 0;
stack reverse; // declare a local stack!!!!!!!!!!!!!!!!!!
int ctr=0; // declare a local counter!!!!!!!!!!!!!!!
cout << "Please enter a decimal: ";
cin >> num;
cout << "The decimal number " << num << " converts to the octal number: ";
while(num > 0)
{
total = num % 8;
num /= 8;
//cout << total << " ";
reverse.push(total); // save to stack instead of printing!!!!!!!!!
ctr++; // count the number of digits saved!!!!!!!!!!!!
}
while (ctr > 0)
{
cout << reverse.pop() << " ";
ctr--;
}
}
void toHex()
{
int num,counter,x,a,hex[100];
//char c[100];
cout<<"Please enter a decimal: ";
cin>>num;
cout<<"\nThe Decimal number "<<num<<" converts to the Hexadecimal number: ";
for(counter=0;num!=0;counter++)
{
a=num%16;
hex[counter]=a;
num=num/16;
}
for(x=counter-1;x>=0;x--)
{
if(hex[x]==10)
{
cout<<"A";
}
elseif(hex[x]==11)
{
cout<<"B";
}
elseif(hex[x]==12)
{
cout<<"C";
}
elseif(hex[x]==13)
{
cout<<"D";
}
elseif(hex[x]==14)
{
cout<<"E";
}
elseif(hex[x]==15)
{
cout<<"F";
}
else
{
cout<<hex[x];
}
}
}
Please describe the "does not work" in more detail. What "wrong" do you observe? Is it:
a) Compile error (List exact error message.)
b) Crash (List input)
c) Unexpected output. (List input, expected output, observed output.)
Why do two cases use a stack, but not the third?
(See also std::oct, std::dec, std::hex and std::bitset)
#include <iostream>
int main()
{
//Take input from user
std::string inp;
std::cin >> inp;
std::cout << std::endl << std::hex;//Set output format as hexadecimal
std::cout << inp;
/*std::cout << std::endl << std::bin;//Set output format as binary
std::cout << inp;*/
std::cout << std::endl << std::oct;//Set output format as octal
std::cout << inp;
}
Edit: I used to use std::bin earlier but I think it might be wrong or deprecated so I put comments around it but just do some googling and you'll find it