/*用栈实现进制转换*/
#include <stdio.h>
#include <malloc.h>
#define MAX 100
typedef int Elemtype;
typedef struct
{
Elemtype elem[MAX];
int top;
}SQ_stack, *PSQ_stack;
PSQ_stack fuInit_Stack (void) //初始化空栈
{
PSQ_stack L;
L = (PSQ_stack) malloc (sizeof (SQ_stack));
L -> top = -1;
return L;
}/*fuInit_Stack*/
void fuDestroy_Stack (PSQ_stack L) //栈的销毁
{
free (L);
L = NULL;
}/*fuDestroy_Stack*/
int fuIsFull_Stack (SQ_stack l) //判断栈是否满
{
return l.top == MAX - 1 ? 1 : 0;
}/*fuIsFull_Stack*/
int fuIsEmpty_Stack (SQ_stack l) //判断栈是否空
{
return l.top == -1 ? 1 : 0;
}/*fuEmpty_Stack*/
int fuPush_Stack (PSQ_stack L, Elemtype elem) //入栈
{
if (fuIsFull_Stack (*L))
{
return 0;
}
L -> top++;
L -> elem[L -> top] = elem;
return 1;
}/*fuPush_Stack*/
int fuPop_Stack (PSQ_stack L, Elemtype *elem) //出栈
{
if (fuIsEmpty_Stack (*L))
{
return 0;
}
*elem = L -> elem[L -> top];
L -> top--;
return 1;
}/*fuPop_Stack*/
int main (void)
{
PSQ_stack L;
Elemtype elem;
int k;
printf ("输入一个十进制数:/n");
scanf ("%d", &elem);
printf ("输入进制:/n");
scanf ("%d", &k);
L = fuInit_Stack ();
while (elem)
{
fuPush_Stack (L, elem % k);
elem /= k;
}
while (!fuIsEmpty_Stack (*L))
{
fuPop_Stack (L, &k);
printf ("%d", k);
}
fuDestroy_Stack (L);
return 0;
}