用顺序栈实现数制转换
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 30
typedef struct {
int data[MaxSize];
int top;
}SqStack;
void InitStack(SqStack &S){
S.top = -1;
}
bool EmptyStack(SqStack &S){
if(S.top == -1)
return true;
else
return false;
}
bool FallStack(SqStack &S){
if(S.top == MaxSize-1)
return true;
else
return false;
}
void Push(SqStack &S, int x){
S.top = S.top + 1;
S.data[S.top] = x;
}
void Pop(SqStack &S,int &x){
x = S.data[S.top];
S.top = S.top - 1;
}
void TenConvertTwo(int N){
SqStack S;
InitStack(S);
int e;
int flag=0;
while(N){
if(FallStack(S)){
N=0;flag=1;
printf("栈满,无法求出二进制,请输入合法数据\n");
}
Push(S,N%2);
N=N/2;
}
if(flag == 0){
printf("输入数据的二进制是:");
while(!EmptyStack(S)){
Pop(S,e);
printf("%d",e);
}
printf("\n");
}
}
void TenConvertEight(int N){
SqStack S;
InitStack(S);
int e;
int flag=0;
while(N){
if(FallStack(S)){
N=0;flag=1;
printf("栈满,无法求出八进制,请输入合法数据\n");
}
Push(S,N%8);
N=N/8;
}
if(flag == 0){
printf("输入数据的八进制是:");
while(!EmptyStack(S)){
Pop(S,e);
printf("%d",e);
}
printf("\n");
}
}
void TenConvertSixteen(int N){
SqStack S;
InitStack(S);
int e;
int flag=0;
while(N){
if(FallStack(S)){
N=0;flag=1;
printf("栈满,无法求出十六进制,请输入合法数据\n");
}
if(N%16<=9)
Push(S,N%16);
else
switch(N%16){
case 10:Push(S,'A');break;
case 11:Push(S,'B');break;
case 12:Push(S,'C');break;
case 13:Push(S,'D');break;
case 14:Push(S,'E');break;
case 15:Push(S,'F');break;
}
N=N/16;
}
if(flag == 0){
printf("输入数据的十六进制是:");
while(!EmptyStack(S)){
Pop(S,e);
if(e>64&&e<71)
printf("%c",e);
else printf("%d",e);
}
printf("\n");
}
}
int main(){
int e=0;
printf("请输入一个十进制非负整数:");
scanf("%d",&e);
TenConvertTwo(e);
TenConvertEight(e);
TenConvertSixteen(e);
}