#include <stdio.h> #include <stdlib.h> #define N 10 #define M 5 typedef struct SeqStack { int stacksize; int *base; int *top; }SeqStack; void Initstack(SeqStack *S) { S->base=(int *)malloc(N*sizeof(int)); if(!S->base) exit(1); S->top=S->base; S->stacksize=N; } void Pushstack(SeqStack *S,int e) { if(S->top-S->base>=S->stacksize) { S->base=(int *)realloc(S->base,(S->stacksize+M)*sizeof(int)); S->stacksize+=M; } *S->top++=e; } int Popstack(SeqStack *S) { return *--S->top; } int Emptystack(SeqStack S) { if(S.base>=S.top) return 1; else return 0; } void Destroystack(SeqStack *S) { free(S->base); } int main() { int n,m; SeqStack S; int e; while(1) { printf("请输入要转换的数值(输入非正数退出): "); scanf("%d",&n); if(n<=0) break; printf("请输入要转换的数制: "); scanf("%d",&m); Initstack(&S); while(n) { Pushstack(&S,n%m); n=n/m; } while(!Emptystack(S)) { e=Popstack(&S); printf("%d",e); } printf(" "); Destroystack(&S); } return 0; }