#include <iostream>
using namespace std;
#include <stdlib.h>
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100 //顺序栈存储空间的初始分配量
#define STACKINCREMENT 10
typedef int SElemType;
typedef int Status;
//顺序栈的存储结构
typedef struct{
SElemType *base; //栈底指针
SElemType *top; //栈顶指针
int stacksize; //栈可用的最大容量
}SqStack;
//顺序栈的初始化
Status InitStack(SqStack &S) //构建一个空栈S
{
S.base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); //为顺序栈动态分配一个容量为STACK_INIT_SIZE的数组空间
if(!S.base)
exit (OVERFLOW); //存储分配失败
S.top = S.base; //top初始为base,空栈
S.stacksize = STACK_INIT_SIZE; //stacksize置为栈的最大容量STACK_INIT_SIZE
return OK;
}
//顺序栈的入栈
Status Push(SqStack &S,SElemType e)
{
if(S.top - S.base == S.stacksize ){
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); //栈满,追加存储空间
if(!S.base)
return OVERFLOW; //存储分配失败
S.top=S.base +S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++ = e; //元素e压入栈顶,栈顶指针加一
return OK;
}
//顺序栈的出栈
Status Pop(SqStack &S,SElemType &e) //
{
if(S.top==S.base)
return ERROR; //栈空,返回ERROR
e = *--S.top; //栈顶指针减一,将栈顶元素赋给e
return e;
}
//主函数
int main()
{
int choice=1;
char c;
int n,m;
SElemType e;
SqStack S;
InitStack(S);
cout<<"**********进制转换**********"<<endl;
cout<<"1.输入一个十进制数n"<<endl;
cout<<"2.输入转换的进制m"<<endl;
cout<<"3.进制转换"<<endl;
cout<<"4.继续或退出(y/n)"<<endl;
while(choice) //保证操作的选择循环进行
{
cout<<"请选择操作1--4:"<<endl;
cin>>choice;
if(choice >4 ||choice<=0) //如果输入的操作数不符合条件,则退出程序
{
cout<<"您输入的数据有误!"<<endl;
return 0; //返回0,结束循环,退出程序
}
while(choice <= 4) //进行操作1--4的选择
{
if(choice == 1)
{
cout<<"请输入一个十进制数:"<<endl;
cin>>n;
break;
}
if(choice == 2)
{
cout<<"请输入转换的进制:"<<endl;
cin>>m;
break;
}
if(choice == 3)
{
cout<<"进制转换:"<<endl;
while(n!=0)
{
Push(S,n%m);
n=n/m;
}
while(S.top!=S.base)
{
e=Pop(S,e);
if(e<10)
cout<<e;
else if(e>=10)
{
if(e==10)
cout<<"A";
if(e==12)
cout<<"B";
if(e==13)
cout<<"C";
if(e==14)
cout<<"D";
if(e==15)
cout<<"E";
}
}
cout<<endl;
break;
}
if(choice == 4)
{
cout<<"请输入y/n选择继续或退出"<<endl;
getchar();
cin>>c;
if(c=='y')
{
cout<<"请输入操作1--4继续运行程序:"<<endl;
cin>>choice;
}
if(c == 'n')
return 0; //返回0,结束循环,退出程序
}
}
}
}
10-21
3150
10-14