文章目录

  • 二进制转换为八进制

二进制转换为八进制

​ 二进制转换为八进制,需要使用两个栈,一个栈用于存储二进制数据,另一个栈用于存储八进制数据。

​ 每三个二进制数据代表一个八进制数据。因此,需要弹出三个二进制数据并将其转换为对应的八进制,然后在将八进制数据压栈。

/*********************************************************** @ 二进制转换为八进制 * 二进制转换为八进制,需要两个栈来实现,一个栈用于存储二进制数,* 另一个用于存储八进制数,二进制的每三位代表八进制的一位,弹出二进制* 的三位将其转换为八进制放入到八进制的栈中*********************************************************/#include <stdio.h>
#include <stdlib.h>
#include <math.h>#define STACK_INIT_SIZE 20
#define STACKINCREMENT  10typedef char ElemType;
typedef struct
{ElemType *base;ElemType *top;int stackSize;
}sqStack;/*** @brief  初始化栈* @note   * @param  *s: 栈的地址* @retval None*/
void InitStack(sqStack *s);/*** @brief  压栈操作* @note   * @param  *s: 栈的地址* @param  e: 压栈的数据* @retval None*/
void Push(sqStack *s, ElemType e);/*** @brief  出栈操作* @note   * @param  *s: 栈的地址* @param  *e: 出栈的元素* @retval None*/
void Pop(sqStack *s, ElemType *e);/*** @brief  计算栈的长度* @note   * @param  s: 栈* @retval */
int StackLen(sqStack s);// 函数功能:初始化栈
// 参数*s:栈的地址
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;
}// 函数功能:入栈操作
// 参数*s:栈的地址
// 参数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++;
}// 函数功能:弹栈操作
// 参数*s:栈的地址
// 参数e:存放从栈里弹出的数据
void Pop(sqStack *s, ElemType *e)
{if( s->top == s->base ){return;}*e = *--(s->top);
}// 函数功能:计算栈s的当前长度
// 参数s:栈
int StackLen(sqStack s)
{return (s.top - s.base);
}int main()
{ElemType c;sqStack s1;sqStack s2;int len, i, j, sum = 0;InitStack(&s1); // 初始化栈s1,用来存放二进制输入printf("请输入二进制数,输入‘#’号表示结束!\n\n");scanf("%c", &c);while( c != '#' ){if( c=='0' || c=='1' )  // 检查输入是否二进制Push(&s1, c);scanf("%c", &c);}getchar();      // 把'\n'从缓冲区去掉len = StackLen(s1);printf("二进制栈的大小为: %d\n", len);InitStack(&s2); // 初始化栈s2,用来存放转换的八进制for( i=0; i < len; i+=3 ){for( j=0; j < 3; j++ ){Pop( &s1, &c ); // 取出栈顶元素sum = sum + (c-48) * pow(2, j);if( s1.base == s1.top ){break;}}Push( &s2, sum+48 );sum = 0;}printf("\n转化为八进制数是: ");while( s2.base != s2.top ){Pop( &s2, &c );printf("%c", c);}printf("(O)\n");return 0;
}

二进制转换为八进制-栈方式实现相关推荐

  1. C语言二进制转换为八进制(附完整源码)

    C语言二进制转换为八进制 C语言二进制转换为八进制完整源码 C语言二进制转换为八进制完整源码 #include <stdio.h>// Function that returns the ...

  2. bash 将二进制转换为十进制_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...

    1.背景(Contexts) 之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二.八.十.十六进制转换的计算公式的,进制之间的转换是很基 ...

  3. python中二进制转化为十进制_将二进制、八进制、十六进制转换为十进制

    学习视频 9节课征服「字符编码」-1-字符.字符集.字符编号与字符编码(基础课)-周华健的在线视频教程​edu.csdn.net 二进制.八进制和十六进制向十进制转换都非常容易,就是"按权相 ...

  4. 将二进制、八进制、十六进制转换为十进制

    上节我们对二进制.八进制和十六进制进行了说明,本节重点讲解不同进制之间的转换,这在编程中经常会用到,尤其是C语言. 将二进制.八进制.十六进制转换为十进制 二进制.八进制和十六进制向十进制转换都非常容 ...

  5. 二进制、八进制、十进制、十六进制关系及转换

    二进制,八进制,十进制,十六进制之间的关系是什么?相互之间如何转换? 本文内容参考自王达老师的<深入理解计算机网络>一书<中国水利水电出版社> 一.数制解释: 1.编程中经常使 ...

  6. 二进制,八进制,十进制,十六进制,进制之间的转换法则及规律。

    进位制/位置计数法是一种记数方式,故亦称进位记数法/位值计数法,可以用有限的数字符号代表所有的数值.可使用数字符号的数目称为基数(en:radix)或底数,基数为n,即可称n进位制,简称n进制.现在最 ...

  7. 09、进制的转换 原码、反码、补码 二进制、八进制、十进制、十六进制的转换

    进制的讲解 在计算机里面一个数值是以什么形式进行保存?使用二进制的补码进行保存(原码.补码.反码) 机器数 一个数在计算机中的表现形式叫做机器数,这个数有正负之分,在计算机中用一个数的最高位(符号位) ...

  8. 【基础01】二进制、八进制、十进制、十六进制的概念及转换关系

    [基础01]二进制.八进制.十进制.十六进制的概念及转换关系 概述:二进制.八进制.十进制.十六进制的概念及转换关系详解 一.各进制的概念 常用的进制包括:二进制.八进制.十进制与十六进制,它们之间区 ...

  9. c++十六进制转十进制_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...

    1.背景(Contexts) 之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二.八.十.十六进制转换的计算公式的,进制之间的转换是很基 ...

最新文章

  1. PAT1046 划拳 (15 分)
  2. c语言 define 关键字,c语言中define的一个不常见的用法
  3. Android自己定义DataTimePicker(日期选择器)
  4. Windows与Linux(服务器)之间大文件传输
  5. 洛谷 P2089 烤鸡
  6. WebRequest 对象的使用
  7. android 不生成odex文件方法
  8. OCJP考试习题(1z0-808)(一)
  9. printf输出格式
  10. 汽车发动机号码编码规则
  11. 计算机处理汉字信息时所使用的代码是,计算机处理汉字信息时所用的代码是什么...
  12. mysql md5 sha1_PHP md5 vs sha1 性能测试
  13. 24V转3.3V稳压芯片,低压降线性稳压器
  14. 警告记录 - [Timing 38-316] Clock period ‘10.000‘ specified during out-of-context synthesis of instance
  15. 王牌竞速安装后显示服务器维护,王牌竞速怎么修车 王牌竞速怎么维修车 王牌竞速的车怎么维护...
  16. Directshow完整介绍
  17. Compose实战-以MVI的方式写Compose
  18. 用inception_v3提取图片的特征向量
  19. Drools 7 用OOPath遍历嵌套类型的实体对象
  20. Python_OpenCV调用摄像头完成人脸识别

热门文章

  1. 快速撑握C#知识点之变量,类型及类型转换
  2. poj 3321 Apple Tree(dfs序+树状数组求和模型)
  3. Open3D编译安装
  4. NYOJ 150 Train Problem I STL栈
  5. 微软的搜索引擎挺不错的
  6. 5-Error:failed to find Build Tools revision 28.0.0 rc1解决方案
  7. 关于SQL Server 数据库归档的一些思考和改进
  8. IE报vuex requires a Promise polyfill in this browser问题解决
  9. 施密特出售Google股票套现3.27亿美元
  10. 最优的cuda线程配置