利用栈的LIFO特点将二进制数转换为十进制数

///利用栈的LIFO特点将二进制转化为十进制
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10

typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;

void InitStack(sqStack *s)  //创建一个栈并初始化
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s->base)
{
exit(0);
}
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}

void Push(sqStack *s, ElemType e)  //压栈操作
{
if(s->top - s->base >= s->stackSize)
{
s->base = (ElemType *)realloc(s->base,(s->stackSize+STACKINCREMENT)*sizeof(ElemType));
if (!s->base)
{
exit(0);
}
}
*(s->top) = e;
s->top++;
}

void Pop(sqStack *s,ElemType *e)  //弹栈操作
{
if(s->top == s->base)
{
return;
}
*e = *--(s->top);
}

int StackLen(sqStack s)   //获取栈的当前容量
{
return (s.top - s.base);
}

main()  //主函数
{
ElemType c;
sqStack s;
int len,i,sum=0;
InitStack(&s);

printf("Please input a binary number,end with #:\n");
scanf("%c",&c);
while(c != '#')
{
Push(&s,c);
scanf("%c",&c);
}
getchar();  //将输入完成后的回车(‘/n‘)从键盘缓冲区取出，避免造成下次输入时程序混乱
len = StackLen(s);
printf("The length of current stack is :%d\n",len);  //输出当前栈的长度
for (i =0;i < len;i++)
{
Pop(&s,&c);
sum = sum + (c-48)*pow(2,i);
}
printf("The decimal number is :%d\n",sum);
return 0;
}