c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(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 &am

p;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;

}

你可能感兴趣的:(c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...)