#include
#include
#define N 2
#define initsize 20
#define increment 10
typedef int elemtype;
typedef struct stack{
elemtype *base;
elemtype *top;
int stacksize;
}stack;
void initstack(stack &s)//初始化栈
{s.base=(elemtype *)malloc(initsize*sizeof(elemtype));
if(!s.base)
exit(0);
s.stacksize=initsize;
//s.base=s.top;笔误?
s.top = s.base;}
void push(stack &s,/*elemtype &x*/elemtype x)//入栈,若栈满追加栈空间
//x何必要引用?
{if(s.top-s.base>=initsize)
s.base=(elemtype *)realloc(s.base,(s.stacksize+increment)*sizeof(elemtype));
if(!s.base)
exit(0);
//s.top=s.base+s.stacksize;这句不应该要,原因自己想
s.stacksize+=increment;
*s.top=x;
s.top++;
}
void pop(stack &s,elemtype &x)//出栈
{if(s.base==s.top)
printf("有错误");
else
x=*--s.top;
}
int isempty(stack &s)//判栈空
{if(s.base==s.top)
return 1;
else return 0;
}
void clearstack(stack &s)
{if(s.base==s.top)
return ;
s.base=s.top;
}
void convert(int n)//进制转换
{int x;
stack s;
initstack(s);
while(n!=0)
{
push(s,n%N);
n/=N;
}
while(!isempty(s))
{pop(s,x);
printf("%d",x);
}
clearstack(s);
}
int main()
{
int n;
printf("请输入一十进制数:");
scanf("%d",&n);
printf("转化后的数是:");
convert(n);
return 0;
}