SqStack.h
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; //栈顶指针
}SqStack;
void InitStack(SqStack &st)//初始化
{
st.top=-1;
}
void DestroyStack(SqStack st)//销毁栈
{
printf("栈已销毁\n");
}
int Push(SqStack &st,ElemType x)//进栈
{
if(st.top==MaxSize-1)
return 0;
else
{
st.top++;
st.data[st.top]=x;
return 1;
}
}
int Pop(SqStack &st,ElemType &x)//出栈char
{
if(st.top==-1)
return 0;
else
{
x=st.data[st.top];
st.top--;
return 1;
}
}
int Pop1(SqStack &st,int &x)//出栈int
{
if(st.top==-1)
return 0;
else
{
x=st.data[st.top];
st.top--;
return 1;
}
}
int StackEmpty(SqStack st)//判断
{
if(st.top==-1)
return 1;
else
return 0;
}
主函数
#include<stdio.h>
#include<stdlib.h>
#include"SqStack.h"
void trans(int d,char b[],int j)//10进制以内
{
SqStack st;
InitStack(st);
char ch;
int i=0;
while(d!=0)
{
ch=d%j+'0';
Push(st,ch);
d/=j;
}
while(!StackEmpty(st))
{
Pop(st,ch);
b[i]=ch;
i++;
}
b[i]='\0';
}
void trans1(int d,int j)//16进制
{
SqStack st;
InitStack(st);
char ch;
while(d!=0)
{
Push(st,d%j);
d/=j;
}
while(!StackEmpty(st))
{
Pop1(st,d);
switch(d)
{
case 10:{ch='A';printf("%c\n",ch);}break;
case 11:{ch='B';printf("%c\n",ch);}break;
case 12:{ch='C';printf("%c\n",ch);}break;
case 13:{ch='D';printf("%c\n",ch);}break;
case 14:{ch='E';printf("%c\n",ch);}break;
case 15:{ch='F';printf("%c\n",ch);}break;
default:printf("%d\n",d);break;
}
}
}
void main()
{
int d,j;
char str[MaxSize];
printf("请输入所要转换的进制:");
scanf("%d",&j);
if(j<11)
{
do
{
printf("请输入所要转换的数字:");
scanf("%d",&d);
}while(d<0);
trans(d,str,j);
printf("对应进制:%s\n",str);
}
else
{
do
{
printf("请输入所要转换的数字:");
scanf("%d",&d);
}while(d<0);
trans1(d,j);
}
}