首先最简单的是实现10进制和2进制的转换
/*
输入一个数,然后输出其对应的8进制的数
*/
#include<stdio.h>
#define MAX 1000//顺序栈存储空间最大值
//int n,m;//n表示输入的数,m表示输出的数的进制
//先定义一个顺序栈的结构
typedef struct{
int *base;//栈底4指针
int *top;//栈顶指针
int stacksize;
}SqStack;
//初始化顺序栈
int InitStack(SqStack &S){
S.base=new int[MAX];
if(!S.base){
return 0;//存储空间分配失败
}
S.top=S.base;
S.stacksize=MAX;
return 1;
}
//判断栈是否为空
int IsEmpty(SqStack &S){
if(S.base==S.top){
return 1;//栈空
}else{
return 0;//栈非空
}
}
//入栈
int Push(SqStack &S,int e){
if(S.top-S.base==S.stacksize){
return 0;//栈满
}
*S.top++=e;
return 1;
}
//出栈
int Pop(SqStack &S,int &e){
if(S.top==S.base){
return 0;//栈空
//printf("栈空\n");
}
e=*--S.top;
return 1;
//printf("%d",e);
}
//数制转换
void conversion(SqStack &S,int n){
//n表示输入的数,m表示输出的数的进制
InitStack(S);
while(n){
Push(S,n%2);
n=n/2;
}
while(!IsEmpty(S)){
int e;
Pop(S,e);
printf("%d",e);
}
}
int main(){
SqStack S;
if(InitStack(S)){
printf("栈S初始化成功!\n");
}else{
printf("栈S初始化失败!\n");
}
if(IsEmpty(S)){
printf("栈为空.\n");
}else{
printf("栈非空.\n");
}
int n;
printf("请输入数n:");
scanf("%d",&n);
conversion(S,n);
}