十进制数转换成二进制,八进制,十六进制(c语言)

#include
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR -1

typedef struct{
int *base;
int *top;
int stacksize;
} SqStack;
int InitStack(SqStack &S);
int GetTop(SqStack S,int &e);
int Push(SqStack &S,int e);
int Pop(SqStack &S,int &e);
int InitStack(SqStack &S);
int StackEmpty(SqStack S);
void JinZhi(SqStack &S,int e,int cj);
int main()
{
int N,Cho;
int cj;
SqStack S;

InitStack(S);
printf("请选择转换类型:1:十进制->二进制 2:十进制->八进制 3:十进制->十六进制 \n");
printf("请输入你的选择:");
scanf("%d",&Cho);
switch(Cho)
{
case 1:cj=2;printf("你选择的是十进制转换成二进制\n\n");printf("请输入要转换的十进制数:");scanf("%d",&N);break;
case 2:cj=8;printf("你选择的是十进制转换成八进制\n\n");printf("请输入要转换的十进制数:");scanf("%d",&N);break;
case 3:cj=16;printf("你选择的是十进制转换成十六进制\n\n");printf("请输入要转换的十进制数:");scanf("%d",&N);break;
default:printf("请从1-3中选择!");
}
JinZhi(S,N,cj);

return OK;
}
void JinZhi(SqStack &S,int N,int cj)
{
int e;
char jz;
while(N)
{
Push(S,N%cj);
N=N/cj;
}
printf("转换后的值: ");
while(!StackEmpty(S))
{
Pop(S,e);

if(e>=10)
{
switch(e)
{
case 10:jz='a';break;
case 11:jz='b';break;
case 12:jz='c';break;
case 13:jz='d';break;
case 14:jz='e';break;
case 15:jz='f';break;
}
printf("%c",jz);
}
else
printf("%d",e);
}
printf("\n");
}
int InitStack(SqStack &S)
{
S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
int GetTop(SqStack S,int &e)
{
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return OK;
}
int Push(SqStack &S,int e)
{
if((S.top-S.base)>=S.stacksize)
{
S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
int Pop(SqStack &S,int &e)
{
if(S.top==S.base) return ERROR;
e=*--S.top;
return OK;
}
int StackEmpty(SqStack S)
{
if(S.top!=S.base) return 0;

}

相关文档
最新文档