#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100 /*存储空间初始分配量*/
#define STACKINCRRMENT 10 /*存储空间增量*/
#define ok 1
#define error 0
#define Status int
typedef struct
{
int *base; /*栈尾指针*/
int *top; /*栈头指针*/
int stacksize; /*当前以分配的存储空间*/
} spstack;
Status Initstack(spstack *s)
{ /*构造一个空栈s*/
s->base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));
if (!s->base)
exit(1); /*存储分配失败*/
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
return ok;
}
int Pop(spstack *s)
{ /*若栈不空,删除栈顶元素,并用e返回其值*/
int e;
if(s->top==s->base)
return error;
e=*(--s->top);
return e;
}
Status push(spstack *s, int e)
{ /*插入元素e为新的栈顶元素*/
if(s->top-s->base >= s->stacksize) /*栈满,追加存储空间*/
{
s->base = (int*)realloc(s->base, (s->stacksize+STACKINCRRMENT)*sizeof(int));
if (!s->base)
exit(0);
s->top = s->base + s->stacksize;
s->stacksize += STACKINCRRMENT;
}
*s->top++=e;
return ok;
}
void conversion(int p, int n, spstack *s)
{ /* 输入任意的十进制数转换成想换成的进制数*/
int m;
Initstack(s);
do
{
push(s, p%n);
p = p / n;
} while (p);
while (s->base != s->top)
{
m = Pop(s);
if (m < 10)
printf("%d", m);
else
printf("%c", m-10+'A');
}
}
int main()
{
int p, n;
spstack s;
printf("输入要转换成?进制:\n");
scanf("%d", &n);
getchar();
printf("输入要转换的进制数:\n");
scanf("%d", &p);
conversion(p, n, &s);
putchar('\n');
return 0;
}