#include <stdio.h> #include <stdlib.h> #define SIZE 100 #define INCREMENT 10 typedef struct { int* base; int* top; int stacksize; }SqStack; int initStack(SqStack& S) { S.base=(int*)malloc(sizeof(int)*SIZE); if(!S.base) { printf("分配堆失败!/n"); return 1; } S.top=S.base; S.stacksize=SIZE; return 0; } int push(SqStack &S,int e) { if(S.top-S.base>=S.stacksize) { S.base=(int*)realloc(S.base,(S.stacksize+INCREMENT)*sizeof(int)); if(!S.base) { printf("分配堆失败!/n"); return -1; } S.top=S.base+S.stacksize; S.stacksize+=INCREMENT; } *S.top++=e; return 0; } int pop(SqStack &S,int &e) { if(S.base==S.top) { printf("栈为空!"); return 1; } S.top--; e=*S.top; return 0; } int destroy(SqStack &S) { free(S.base); S.base=NULL; S.top=NULL; return 0; } int main() { int n; int m; int e; SqStack S; initStack(S); printf("请输入需要转换成的进制:/n"); scanf("%d",&m); printf("请输入要转换的成%d进制的数:/n",m); scanf("%d",&n); while(n) { push(S,n%m); n=n/m; } while(S.base!=S.top) { pop(S,e); printf("%d",e); } printf("/n"); destroy(S); return 0; }