二进制/八进制转换器
题目要求
编写一段程序,要求从终端输入一串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();
}
二进制/八进制转换器相关推荐
- 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...
C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...
- java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制
java编程思想_007打印二进制,八进制,十六进制 package wzs.test2; //打印二进制,八进制,十六进制 public class Test { public static voi ...
- 十进制转二进制 / 八进制 / 十六进制的手算方法,及其数学原理的通俗解释
前言:接触计算机的同学学习基础课程时,不免会碰到十进制转二进制 / 八进制 / 十六进制这种问题.常见的方法有"除以2/8/16看余数".本文在介绍方法的前提上,对其数学原理进行了 ...
- 二进制 八进制 十进制 十六进制 之间进制转换(图解篇)
一.本文所涉及的内容(Contents) 目录 一.本文所涉及的内容(Contents) 二.背景(Contexts) 三.进制转换算法(Convert) ( ...
- 二进制 八进制 十进制 十六进制
2->8:从个位开始把二进制数三个一组分组,然后每组分别换成8进制, 例:11,101,100 就是分组后的结果 11->3 101->5 100->4 所以结果是354 8- ...
- 计算机系统中常用的进制,计算机中常用 二进制 八进制 十进制 十六进制的特点...
计算机中常用的计数制 用若干数位(由数码表示)的组合去表示一个数,各个数位之间是什么关系,即逢"几"进位,这就是进 位计数制的问题.也就是数制问题.数制,即进位计数制,是人们利用数 ...
- 二进制八进制相互转换
1)二进制->八进制 理论:取三合一法. 即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是一位八位二进制数,然后,按顺序进行排列,小数点的位置不变 ...
- c语言实现二进制八进制十进制和十六进制的相互转化
c语言实现二进制八进制十进制和十六进制的相互转化 十进制转其他进制 (该程序以十转二为例) #include<stdio.h> void change(int n)//利用递归将每次的余数 ...
- python十六进制转换成八进制_Python 进制转换 二进制 八进制 十进制 十六进制
全局定义一定不要丢了 全局定义 base = [str(x) for x in range()] + [ chr(x) for x in range(ord('A'),ord('A')+)] 二进制 ...
最新文章
- android onresume时view,android – 当对话框出现时不调用OnResume
- java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?
- Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
- Eclipse手动配置svn
- UpdatePanel 学习之 ChildrenAsTriggers
- 一个关于文件结构体数组的条件排序函数
- Atitit.实现反向代理(1)----url rewrite 配置and内容改写 and -绝对路径链接改写 java php
- Win10如何配置数据源ODBC数据源
- TCP粘包产生的原因、解决办法
- Linux运维高级核心基础
- VCS(DVE)调试
- linux 免费教程下载,Linux系统入门教程
- 将中文字符串转为拼音
- Python -- Matplotlib:设置画布大小和子图个数
- 安卓gpio操作示例
- Centos7安装Python
- 互联网金融平台常见绑卡鉴权方式分析对比
- Maven问题记录:本地打包成功,远程打包报错,找不到依赖包
- ACM-ICPC 2018 南京赛区网络预赛 E. AC Challenge(状压dp)
- 【500强外资金融科技中心】Seeking研发(Java/React Native)/测试/DevOps/项目管理/架构师
热门文章
- 股票模拟交易日志(一)
- 动手实现一个docker引擎-1-从内核到docker的三驾马车
- vCenter Server 补丁升级手册
- 2.4.2 死锁的处理策略-预防死锁(破坏互斥条件、破坏不可剥夺条件、破坏请求和保持条件、破坏循环等待条件)
- can和could的用法_情态动词can和could用法详解
- java 数字转化为汉字_工具类_java 数字转化为汉字大写
- 欧美义务教育改革新视野:重估“家庭学校”的价值
- 28 Apr 10:25:21.537 # HandleServiceCommands: system error caught. error code=1072, message = Create
- 论文学习笔记: Learning Multi-Scale Photo Exposure Correction(含pytorch代码复现)
- OSChina App代码分析二