题目要求
编写一段程序,要求从终端输入一串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 10typedef char Elemtype;
typedef struct {Elemtype *top;Elemtype *base;int stacksize;
}sqstack;//初始化栈
void initstack(sqstack *s)
{//内存中开辟一段连续的空间作为栈空间,首地址给s->bases->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();
}

二进制/八进制转换器相关推荐

  1. 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...

    C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...

  2. java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制

    java编程思想_007打印二进制,八进制,十六进制 package wzs.test2; //打印二进制,八进制,十六进制 public class Test { public static voi ...

  3. 十进制转二进制 / 八进制 / 十六进制的手算方法,及其数学原理的通俗解释

    前言:接触计算机的同学学习基础课程时,不免会碰到十进制转二进制 / 八进制 / 十六进制这种问题.常见的方法有"除以2/8/16看余数".本文在介绍方法的前提上,对其数学原理进行了 ...

  4. 二进制 八进制 十进制 十六进制 之间进制转换(图解篇)

    一.本文所涉及的内容(Contents)                      目录 一.本文所涉及的内容(Contents) 二.背景(Contexts) 三.进制转换算法(Convert) ( ...

  5. 二进制 八进制 十进制 十六进制

    2->8:从个位开始把二进制数三个一组分组,然后每组分别换成8进制, 例:11,101,100 就是分组后的结果 11->3 101->5 100->4 所以结果是354 8- ...

  6. 计算机系统中常用的进制,计算机中常用 二进制 八进制 十进制 十六进制的特点...

    计算机中常用的计数制 用若干数位(由数码表示)的组合去表示一个数,各个数位之间是什么关系,即逢"几"进位,这就是进 位计数制的问题.也就是数制问题.数制,即进位计数制,是人们利用数 ...

  7. 二进制八进制相互转换

    1)二进制->八进制 理论:取三合一法. 即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是一位八位二进制数,然后,按顺序进行排列,小数点的位置不变 ...

  8. c语言实现二进制八进制十进制和十六进制的相互转化

    c语言实现二进制八进制十进制和十六进制的相互转化 十进制转其他进制 (该程序以十转二为例) #include<stdio.h> void change(int n)//利用递归将每次的余数 ...

  9. python十六进制转换成八进制_Python 进制转换 二进制 八进制 十进制 十六进制

    全局定义一定不要丢了 全局定义 base = [str(x) for x in range()] + [ chr(x) for x in range(ord('A'),ord('A')+)] 二进制 ...

最新文章

  1. android onresume时view,android – 当对话框出现时不调用OnResume
  2. java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?
  3. Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
  4. Eclipse手动配置svn
  5. UpdatePanel 学习之 ChildrenAsTriggers
  6. 一个关于文件结构体数组的条件排序函数
  7. Atitit.实现反向代理(1)----url rewrite 配置and内容改写 and -绝对路径链接改写 java php
  8. Win10如何配置数据源ODBC数据源
  9. TCP粘包产生的原因、解决办法
  10. Linux运维高级核心基础
  11. VCS(DVE)调试
  12. linux 免费教程下载,Linux系统入门教程
  13. 将中文字符串转为拼音
  14. Python -- Matplotlib:设置画布大小和子图个数
  15. 安卓gpio操作示例
  16. Centos7安装Python
  17. 互联网金融平台常见绑卡鉴权方式分析对比
  18. Maven问题记录:本地打包成功,远程打包报错,找不到依赖包
  19. ACM-ICPC 2018 南京赛区网络预赛 E. AC Challenge(状压dp)
  20. 【500强外资金融科技中心】Seeking研发(Java/React Native)/测试/DevOps/项目管理/架构师

热门文章

  1. 股票模拟交易日志(一)
  2. 动手实现一个docker引擎-1-从内核到docker的三驾马车
  3. vCenter Server 补丁升级手册
  4. 2.4.2 死锁的处理策略-预防死锁(破坏互斥条件、破坏不可剥夺条件、破坏请求和保持条件、破坏循环等待条件)
  5. can和could的用法_情态动词can和could用法详解
  6. java 数字转化为汉字_工具类_java 数字转化为汉字大写
  7. 欧美义务教育改革新视野:重估“家庭学校”的价值
  8. 28 Apr 10:25:21.537 # HandleServiceCommands: system error caught. error code=1072, message = Create
  9. 论文学习笔记: Learning Multi-Scale Photo Exposure Correction(含pytorch代码复现)
  10. OSChina App代码分析二