#include <iostream.h>
#include <stdlib.h>
#define MaxSize 20
typedef struct
{
char data[MaxSize]; //
int top;
}SqStack;
void Menu(void);
void ShowBit(SqStack *s,int x, int r);
void InitStack(SqStack *&s);
int StackEmpty(SqStack *s);
void Push(SqStack *&s, char e);
void Pop(SqStack *&s, char &e);
void DestroyStackt(SqStack *&s);
int main()
{
SqStack *s;
InitStack(s);
int x;
int num;
do
{
Menu();
while(cin >> num )
{
if(num >= 1 && num <= 4)
break;
else
cout << "您输入不合法请重新输入:";
}
switch(num)
{
case 1 :
cout << "请输入你要转换的10进制数:";
cin >> x;
ShowBit(s,x,2);
break;
case 2 :
cout << "请输入你要转换的10进制数:";
cin >> x;
ShowBit(s,x,8);
break;
case 3 :
cout << "请输入你要转换的10进制数:";
cin >> x;
ShowBit(s,x,16);
break;
case 4 :
DestroyStackt(s);
cout << "谢谢你的使用,再见!\n";
}
}while(num >= 1 && num <= 3);
return 0;
}
//菜单
void Menu(void)
{
cout << "\n 欢迎使用进制转换器\n\n";
cout << "(1)转换为2进制 \n" ;
cout << "(2)转换为8进制 \n" ;
cout << "(3)转换为16进制 \n" ;
cout << "(4)退出\n\n" ;
cout << "请输入您的选项:" ;
}
//进制转换
void ShowBit(SqStack *s,int x, int r)
{
//由于16进制须用到 A~F
char a[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while(x!=0)
{
Push(s,a[x%r]);
x=x/r;
}
cout << "转换为" << r <<"进制后是:";
while(!StackEmpty(s))
{
Pop(s,a[x]);
cout << a[x];
}
}
//初始化
void InitStack(SqStack *&s)
{
s = (SqStack *)malloc(sizeof(SqStack));
s -> top = -1;
}
//判空
int StackEmpty(SqStack *s)
{
return (s -> top == -1);
}
//进栈
void Push(SqStack *&s,char e)
{
s -> top ++ ;
s -> data[s -> top] = e;
}
//出栈
void Pop(SqStack *&s, char & e)
{
e = s -> data[s -> top];
s -> top -- ;
}
//销毁栈
void DestroyStackt(SqStack * &s)
{
free(s);
}