(程序中已详细注释,这里不再重复讲解,有疑惑可留言哦)
//导入头文件
#include
#include
#include
using namespace std;//声明命名空间
//顺序栈
typedef struct{
int *base; //栈底
int *top; //栈顶
int stacksize; //栈的容量
}SqStack;
//初始化栈,创建一个空栈
void initStack(SqStack &S){
int max=100;
S.base=(int *)malloc(max*sizeof(int));
S.top=S.base;
S.stacksize=max;
}
//判断栈是否为空
int emptyStack(SqStack S){
if(S.top!=S.base){
return 0;
}else{
return 1;
}
}
//入栈
void push(SqStack &S,int e){
if(S.top-S.base>=S.stacksize){
int remax=10;
S.base=(int *)realloc(S.base,(S.stacksize+remax)*sizeof(int)); //如果栈满了重新开辟空间
S.top=S.base+S.stacksize;
S.stacksize+=remax;
}
*(S.top)=e;
S.top++;
}
//出栈
void pop(SqStack &S,int &e){
if(emptyStack){
S.top--;
e=*(S.top);
}
}
//十进制转2、8、16进制,采用除基倒取余法
void numberConversion(int oNumber,int cvNumber){
SqStack S; //创建栈
int x;
initStack(S); //初始化栈
while(oNumber){
x=oNumber%cvNumber;
push(S,x);//余数入栈
oNumber=oNumber/cvNumber;
}
//余数出栈
while(S.top!=S.base){
pop(S,x);
switch(x){
case 0: case 1: case 2: case 3:
case 4: case 5: case 6: case 7:
case 8: case 9:cout<>choose;
while(choose!=2){
switch(choose){
case 1:{
cout<<"请输入要转换的十进制数:"<>oNumber;
cout<<"请输入要转换至的进制,仅限输入2、8以及16:"<>cvNumber;
numberConversion(oNumber,cvNumber);
break;
}
default:
cout<<"\n!!!您的选择不正确,请重新选择!!!\n";
}
cout<>choose;
}
}
运行结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)