admin管理员组

文章数量:1794759

二进制/八进制转换器

二进制/八进制转换器

    题目要求 编写一段程序,要求从终端输入一串0/1表示的二进制数,输出它的八进制表达形式。 题目分析 进行数制转换这类运算最简单的方法就是使用栈的数据结构。 (1)在输入二进制数时,将每次输入的0/1压入栈A中保存。 (2)转换时,要将二进制的每三位转换成八进制的一位,先得到的是八进制的低位数,因此可以将八进制数保存到一个新的栈B中,知道将栈A中的元素取完为止。 (3)最后将栈B 中的八进制逐一取出显示即可。 (初始化,入栈,出栈等) 进制存储用ASCII码值。


    程序如下:

    #include"stdio.h" #include"math.h" #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 typedef char Elemtype; typedef struct { Elemtype *top; Elemtype *base; int stacksize; }sqstack; //初始化栈 void initstack(sqstack *s) { //内存中开辟一段连续的空间作为栈空间,首地址给s->base s->base=(Elemtype *)malloc(sizeof(Elemtype)*STACK_INIT_SIZE); if(!s->base) exit(0); s->top=s->base; s->stacksize=STACK_INIT_SIZE; } //入栈操作,将e压入栈中 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=s->base+s->stacksize; //追加空间首地址加上原大小为顶 s->stacksize=s->stacksize+STACKINCREMENT; *(s->top)=e; s->top++; } //出栈操作,用e将栈顶元素返回 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() { sqstack s1,s2; Elemtype c; int len,i,j,sum=0; initstack(&s1); printf("Please input a binary number and type # for end\\n"); scanf("%c",&c); while(c!='#') { if('c'==0||'c'==1) push(&s1,c); scanf("%c",&c); } initstack(&s2); len=stacklen(&s1); for(i=0;i<len;i=i+3) { for(j=0;j<3;j++) { pop(&s1,&c); sum=sum+(c-48)*pow(2,j); if(s1.top==s1.base) break; //有可能不是3的倍数 } push(&s2,sum+48); sum=0; //计算八进制每一位时别忘了sum清0 } //输出八进制内容 while(s2->top!=s2->base) { pop(&s2,&c); printf("%d",c); } getche(); }

    本文标签: 转换器八进制