1. 程式人生 > >棧實現二進制轉十進制

棧實現二進制轉十進制

div 實現 -s def getchar() its style malloc pre

代碼如下:

#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 i,len,sum=0; InitStack(&s); printf("輸入二進制數,#代表結束\n"); 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("轉換為十進制數為:%d\n",sum); return 0; }

棧實現二進制轉十進制