1 /*
  2    c++描述将2进制数转化成10进制数
  3    问题,1.初始化栈后,用new,不知道delete是否要再写一个函数释放内存,
  4            还是在哪里可以加上delete
  5          2.如果栈满了,我要分配多点空间,我想的办法是先用delete删除之前申请的
  6            空间,再用new重新申请,但是c语言有一个函数
  7            s->base =(ElemType*) realloc(s->base,(s->stackSize + STACKINCREMENT) * sizeof(ElemType));//分配空间
  8            不知道c++有没有這样的函数。
  9 */
 10 #include <iostream>
 11 #include <math.h>
 12 using namespace std;
 13
 14
 15 const int STACK_INIT_SIZE=20;
 16 const int STACKINCREMENT=10;
 17
 18 typedef char ElemType;  //定义一个字符串,因为二进制只有0和1,0的ascii表为48 ,1为49,
 19                         //只要进栈元素减去48再乘以2的次方数就ok
 20
 21
 22 typedef struct
 23 {
 24      ElemType* top;   //栈顶
 25      ElemType* base ;  // 栈底
 26      int  stackSize;   // 栈的容量
 27 }sqStack;
 28
 29
 30 void InitStack (sqStack *s)  //初始化栈
 31 {
 32     try
 33     {
 34           s -> base = new ElemType  [STACK_INIT_SIZE] ; //申请空间
 35              s -> top = s -> base ;                     //栈空 ,栈顶等于栈底
 36           s -> stackSize = STACK_INIT_SIZE;
 37     }
 38
 39        catch (bad_alloc)
 40        {
 41           cout << "分配空间失败!"<< endl;
 42           exit (0);
 43        }
 44 }
 45
 46
 47 void Push (sqStack *s ,ElemType e)   // 进栈
 48 {
 49     try{
 50         if (s -> top - s -> base >= s->stackSize)
 51             {
 52                  delete s -> base;     // 删除先前分配的空间再重新分配
 53                  s -> base = new ElemType[STACK_INIT_SIZE+STACKINCREMENT];
 54             }
 55            *(s->top) = e;   //先赋值再将栈顶往上移动
 56            s->top++;
 57         }
 58     catch (bad_alloc){
 59             cout << "分配空间失败!"<< endl;
 60             exit (0);
 61     }
 62 }
 63
 64 void Pop(sqStack *s, ElemType *e)
 65 {
 66        if (s -> top == s -> base)
 67        {
 68            cout << "栈为空"<<endl;
 69            exit(0);
 70        }
 71
 72            s -> top --;     //先将栈顶指向元素,再把元素赋值给形参
 73            *e= * s->top;  //    *e = *--(s->top);
 74
 75 }
 76
 77 int StackLen (sqStack s)    //返回栈有多少个元素
 78 {
 79    return ( s.top - s.base);  //  实质是地址相减 除以ElemType
 80 }
 81
 82
 83
 84 int main()
 85 {
 86     ElemType c;  //声明一个字符c
 87     sqStack s;   //声明一个结构体s
 88
 89     int len,i,sum=0;
 90     InitStack(&s);     //初始化栈
 91     cout <<"请输入二进制数,输入#结束"<<endl;
 92     cin >>c;
 93     while( c != '#')
 94     {
 95        Push (&s,c);
 96        cin>>c;
 97     }
 98      getchar();   //接收回车键
 99      len =StackLen(s);
100      cout <<"栈的当容量"<<len<<endl;
101      for(i=0; i<len ; i++)
102      {
103          Pop(&s,&c);
104          sum = sum + (c-48) * pow(2,i);
105      }
106      cout <<"转化为十进制数为:"<<sum<<endl;
107
108
109      return 0;
110 }

转载于:https://www.cnblogs.com/biyongyao/p/5402924.html

c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)相关推荐

  1. n进制快速转化成10进制

    n进制快速转换成10进制,不用中间值,直接快速循环累乘并添加最后一位即可.在这里,假设输入的k进制是以字符串形式的.同时,注意下快速映射Map数组的使用. #include <bits/stdc ...

  2. 将BCD码转化成10进制数

    1:目的 将BCD码转化成10进制数,并按照低位到高位的形式组合在一起.例如0x23和0x45 转化成 十进制4523 2:实现 /********************************** ...

  3. 16进制转带符号的10进制,16进制转负数10进制

    16进制转带符号的10进制,16进制转负数10进制 看代码 echo '<pre>'; $str = 'd8f1'; function hex_dec($str){// 一般说明带符号 第 ...

  4. # 将微博地址里面的62进制字符串转换成10进制的16位数字mid

    # 将微博地址里面的62进制字符串转换成10进制的16位数字middef base62_decode(string):alphabet = "0123456789abcdefghijklmn ...

  5. 将8进制字符串数值转换为10进制

    /* * 函数名:oct2dec * 说明:将8进制字符串数值转换为10进制 */ function oct2dec($bin){ // strrev() 函数反转字符串 $temp = strrev ...

  6. 16进制数组转成10进制 qt_计算机组成原理(进制数及转换)

    图片来源于网络 都知道计算机数据是以二进制数0和1补码的形式存储在内存中. 那你知道它们转换关系吗?那么问题来了,为什么要转换? 前面已经说过计算机数据是以二进制0和1存储,所以它们要转换为二进制存储 ...

  7. 16进制字符串转化为10进制数

    同学在MSN CDC电话面试(可惜我在被面试的时候全然没有这么具体的问题了:))中的一个题目:将16进制的字符串转化为10进制数字,例如"1A",则对应26.题目很简单,实现起来也 ...

  8. 16进制转8进制 两种方法先转二进制在转8进制或先转10进制在转8进制

    问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由09.大写字母AF组成的字符串,表示要转换的 ...

  9. 初始化栈、入栈、出栈、栈空、数制转换函数和主函数,实现1348转换成8进制的功能。

    #include<stdio.h> //栈的顺序存储 #include<string.h> #include<stdlib.h> #include<mallo ...

最新文章

  1. RDKit | RDKit处理graph-化合物的邻接矩阵、距离矩阵和维纳指数
  2. java debug体系为什么不能debug到jdk里所有的代码
  3. nginx 安装、操作命令、基本配置与参数说明
  4. exit(0) exit(1) return() 3个的区别
  5. format函数_畅游人工智能之海 | Keras教程之后端函数(一)
  6. 赛锐信息:SAP之工厂设置
  7. Android学习--10-数据存储
  8. 纠结的rename命令
  9. [渝粤教育] 天津科技大学 人工智能导论 参考 资料
  10. mhvtl虚拟磁带库(提供软件包)
  11. Hive常用命令之MSCK REPAIR TABLE命令概述
  12. sharp计算机按钮配置,将Sharp TV HDMI接口连接到计算机并设置教程
  13. 记录一次iPhone5s的iCloud bypass经历
  14. 剑指offer T26 重排链表
  15. 解决OpenOffic不能启动的问题
  16. H264 无损压缩及编解码流程
  17. MFC 利用小型数据库Access 少步惆 教你用VC开发
  18. 《偏生要鲜花着景,应这急景流年》
  19. 【微信小程序】微信小程序提示Do not have handler in component
  20. 华为oj初级 学英语

热门文章

  1. 浅谈Linq to Sql 的不足
  2. Ubuntu 12.04下关闭图形界面知识整理-转
  3. L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT
  4. 蓝桥杯 ALGO-65 算法训练 比赛安排
  5. L1-042 日期格式化-PAT团体程序设计天梯赛GPLT
  6. 在wordpress中使用 markdown:wp-markdown插件的使用方法
  7. POJ 1321-棋盘问题-简单搜索DFS
  8. ionic 支持float吗_oppok7x怎么样值得买吗 oppok7x介绍
  9. 为普通用户添加root权限
  10. oracle 查询创建了哪些存储过程