/*用STACK将任意一个十进制数转化为十六进制数,输出*/
#include "Stdio.h"
#include "Conio.h"
#define stackinitsize 100;
#define stackincrement 10;
typedef struct
{
int *base;
int *top;
int stacksize;}sqstack;
main()
{ int n,e;
sqstack s;
initstack(s);
scanf("%d",&n);
while(n){
push(s,n%16);
n=(n-n%16)/16;
}
while(!stackempty(s))
{ pop(s,e);
switch(e){
case 10:(char)e='A';
printf("%c",e);
case 11:(char)e='B';
printf("%c",e);
case 12:(char)e='C';
printf("%c",e);
case 13:(char)e='D';
printf("%c",e);
case 14:(char)e='E';
printf("%c",e);
case 15:(char)e='F';
printf("%c",e);
default: printf("%d",e);
}
}
}
/*算法initstack()*/
status initstack(sqstack &s)
{
s.base=(int*)malloc(stackinitsize*sizeof(int));
if(!s.base)exit(-2);
s.top=s.base;
s.stacksize=stackinitsize;
return 1;
}
/*算法stackempty()*/
status stackempty(sqstack &s){
if(!s.top)
return 1;
else return 0;
}
/*算法empty()*/status push(sqstack &s,int e)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(elemtype*)realloc(s.base,(s.stacksize+stackincrement)*sizeof(int));
if(!s.base)exit(-2);
s.top=s.base+s.stacksize;
s.stacksize+=stackincrement;
} *s.top++=e;
return 1;}/*算法pop()*/
status pop(sqstack &s,int &e)
{ if(s.top==s.base)
return 0;
e=*--s.top; return 1;}