欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二进制转化为十进制

程序员文章站 2022-07-15 08:21:42
...
//二进制转化为十进制
#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);  //首先把s->top的元素赋值给e 再将地址--
}




int StackLen(sqStack s)  //返回栈有多少个元素
{
    return (s.top - s.base);  //  实质是地址相减 除以ElemType
}



int main()
{
    ElemType c; //声明一个字符c
    sqStack s;  //声明一个结构体s

    InitStack(&s); //初始化栈

    int len,i, sum = 0;
    printf("请输入二进制数,输入#符号表示结束!\n");
    scanf("%c",&c);
    while(c != '#')
    {
        Push(&s,c);
        scanf("%c",&c);

    }

    getchar();   //接收回车键
    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;
}