include<stdio.h>
include<stdlib.h>
include<string.h>
include<malloc.h>
define STACK_INIT_SIZE 100
define STACKINCREASE 10
define ERROR 0
define OK 1
define OVERFLOW -1
//順序棧的實現(棧的特點是后進先出)
typedef struct
{
int *base;
int *top;
int stacksize;//指申請空間的大小,不是指棧里面元素的數量
}SqStack;
//構造一個空棧
int InitStack(SqStack p)//里面的參數應該帶個星號,但顯示不出來
{
p->base = (int)malloc(sizeof(int) * STACK_INIT_SIZE);
if (!p->base) exit(OVERFLOW);
p->top = p->base;
p->stacksize = STACK_INIT_SIZE;
return OK;
}
//銷毀棧
int DestoyStack(SqStack *p)
{
if (!p->base) return ERROR;
free(p->base);
p->base = NULL;
p->stacksize = 0;
return OK;
}
//清空棧
int ClearStack(SqStack *p)
{
if (!p->base) return ERROR;
p->top = p->base;
return OK;
}
//檢查棧是否為空
int StackEmpty(SqStack p)
{
if (!p.base) return ERROR;
if (p.top == p.base) return OK;
else return 0;
}
//取棧頂元素(只取不刪)
int GetTop(SqStack p)
{
if (p.top == p.base) return ERROR;
else return *(p.top - 1);
}
//插入元素e到棧頂
int Push(SqStack p, int e)
{
if (p->top - p->base >= p->stacksize)
{
p->base = (int)malloc(sizeof(int) * (p->stacksize + STACKINCREASE));
if (!p->base) exit(OVERFLOW);
p->stacksize = p->stacksize + STACKINCREASE;
}
(p->top) = e;
p->top++;
return OK;
//(p->top)++ = e;
}
//刪除棧頂元素
int Pop(SqStack *p)
{
if (p->base == p->top) return ERROR;
p->top--;
return OK;
}
//數值轉換
void conversion()
{
SqStack s;
InitStack(&s);
int n, m;//n是輸入的十進制數,m是需要轉換的進制
scanf_s("%d %d", &n, &m);
while (n)
{
Push(&s, n%m);
n = n / m;
}
while (!StackEmpty(s))
{
printf("%d", GetTop(s));
Pop(&s);
}
}
int main()
{
conversion();
}