使用栈将二进制转换为十进制
将二进制的每一位从栈里读出再计算
#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); } int main() { ElemType c; sqStack s; int len, i, sum = 0; InitStack(&s); scanf("%c", &c);//字符一个一个的输入 while (c!='#') { Push(&s, c); scanf("%c", &c); } getchar();//过滤回车'\n' len = StackLen(s); printf("栈的当前容量是:%d\n", len); for (i = 0; i < len; i++) { Pop(&s, &c); sum = sum + (c - 48)*pow(2, i); } printf("转为10进制为%d\n",sum); return 0; }
