整体源码:
#include<stdlib.h>
#include<stdio.h>
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
typedef int SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} sqstack;
void initstack(sqstack *s)
{
s->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));
if(!s->base)
{
printf("创建空间失败!\n");
return;
}
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return ;
}
void push(sqstack *s,SElemType e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(SElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(SElemType));
}
if(!s->base)
{
printf("栈已满,扩充空间失败!\n");
return ;
}
*s->top++=e;
return;
}
void pop(sqstack *s,SElemType *e)
{
if(s->top==s->base)
{
printf("栈已满\n");
return;
}
*e=*--s->top;
return ;
}
void conversion(int number,int m)
{
sqstack S;
SElemType e;
initstack(&S);
if(number==0)
{
printf("转换后%d的进制:",m);
return ;
}
while(number)
{
push(&S,number%m);
number=number/m;
}
printf("转换后%d的进制:",m);
while(S.base!=S.top)
{
pop(&S,&e);
switch(e)
{
case 10:putchar('A');break;
case 11:putchar('B');break;
case 12:putchar('C');break;
case 13:putchar('D');break;
case 14:putchar('E');break;
case 15:putchar('F');break;
default :printf("%d",e);
}
}
}
int main()
{
int number,m;
printf("请输入要进行转换的数值:");
scanf("%d",&number);
printf("请输入要转换的数制:");
scanf("%d",&m);
conversion(number,m);
return 0;
}
源码讲解:下期分解