二進位制轉化為十進位制
阿新 • • 發佈:2019-02-16
#define Stack_INIT_SIZE 20
#define StackINCREMENT 10
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
}stack;
void INITStack(stack *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(stack *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(stack *s, ElemType *e)
{
if(s->top==s->base)
{
return;
}
*e=*--(s->top);
}
int stacklen(stack s)
{
return(s.top-s.base);
}
int main()
{
ElemType c;
stack s;
int len,i,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;
}
#define StackINCREMENT 10
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
}stack;
void INITStack(stack *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(stack *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(stack *s, ElemType *e)
{
if(s->top==s->base)
{
return;
}
*e=*--(s->top);
}
int stacklen(stack s)
{
return(s.top-s.base);
}
int main()
{
ElemType c;
stack s;
int len,i,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;
}