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. const int STACK_INIT_SIZE=;
  15. const int STACKINCREMENT=;
  16.  
  17. typedef char ElemType; //定义一个字符串,因为二进制只有0和1,0的ascii表为48 ,1为49,
  18. //只要进栈元素减去48再乘以2的次方数就ok
  19.  
  20. typedef struct
  21. {
  22. ElemType* top; //栈顶
  23. ElemType* base ; // 栈底
  24. int stackSize; // 栈的容量
  25. }sqStack;
  26.  
  27. void InitStack (sqStack *s) //初始化栈
  28. {
  29. try
  30. {
  31. s -> base = new ElemType [STACK_INIT_SIZE] ; //申请空间
  32. s -> top = s -> base ; //栈空 ,栈顶等于栈底
  33. s -> stackSize = STACK_INIT_SIZE;
  34. }
  35.  
  36. catch (bad_alloc)
  37. {
  38. cout << "分配空间失败!"<< endl;
  39. exit ();
  40. }
  41. }
  42.  
  43. void Push (sqStack *s ,ElemType e) // 进栈
  44. {
  45. try{
  46. if (s -> top - s -> base >= s->stackSize)
  47. {
  48. delete s -> base; // 删除先前分配的空间再重新分配
  49. s -> base = new ElemType[STACK_INIT_SIZE+STACKINCREMENT];
  50. }
  51. *(s->top) = e; //先赋值再将栈顶往上移动
  52. s->top++;
  53. }
  54. catch (bad_alloc){
  55. cout << "分配空间失败!"<< endl;
  56. exit ();
  57. }
  58. }
  59.  
  60. void Pop(sqStack *s, ElemType *e)
  61. {
  62. if (s -> top == s -> base)
  63. {
  64. cout << "栈为空"<<endl;
  65. exit();
  66. }
  67.  
  68. s -> top --; //先将栈顶指向元素,再把元素赋值给形参
  69. *e= * s->top; // *e = *--(s->top);
  70.  
  71. }
  72.  
  73. int StackLen (sqStack s) //返回栈有多少个元素
  74. {
  75. return ( s.top - s.base); // 实质是地址相减 除以ElemType
  76. }
  77.  
  78. int main()
  79. {
  80. ElemType c; //声明一个字符c
  81. sqStack s; //声明一个结构体s
  82.  
  83. int len,i,sum=;
  84. InitStack(&s); //初始化栈
  85. cout <<"请输入二进制数,输入#结束"<<endl;
  86. cin >>c;
  87. while( c != '#')
  88. {
  89. Push (&s,c);
  90. cin>>c;
  91. }
  92. getchar(); //接收回车键
  93. len =StackLen(s);
  94. cout <<"栈的当容量"<<len<<endl;
  95. for(i=; i<len ; i++)
  96. {
  97. Pop(&s,&c);
  98. sum = sum + (c-) * pow(,i);
  99. }
  100. cout <<"转化为十进制数为:"<<sum<<endl;
  101.  
  102. return ;
  103. }

c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)的更多相关文章

  1. C#中2、8、16进制 有符号转换10进制正负数

    曾经让我苦想的其他进制转有符号整型问题,结果自己想到方法解决后才发现原来如此简单. 1.Int16(2个byte长度 ) : 方法 :Convert.ToInt16(进制编码,进制) a.16进制转1 ...

  2. c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)

    //c语言描述 将2进制转化为10进制 #include <stdio.h> #include <stdlib.h> #include <math.h> #defi ...

  3. python进制转化函数,10进制字符串互转,16进制字符串互转

    来了老弟,emmmmm,今天想到平时经常用到编码转化,把字符串转化为16进制绕过等等的,今天想着用python写个玩,查询了一些资料,看了些bolg 上面的两个函数是将二进制流转化为16进制,data ...

  4. 十进制和n进制的转换(10进制转换为36进制)

    答案如下: void Convert() { map<int ,string> maps; maps[0]="0"; maps[1]="1"; ma ...

  5. (高精度运算4.7.26)POJ 1220 NUMBER BASE CONVERSION(高精度数的任意进制的转换——方法:ba1----->10进制----->ba2)

    package com.njupt.acm; import java.math.BigInteger; import java.util.Scanner; public class POJ_1220_ ...

  6. C语言实现字符串中(10进制和16进制)转成十进制数

    如何将字符串中的10进制数和16进制数提取出来,看以下代码: #include <stdio.h> typedef char TUINT8 ; typedef int TUINT32; T ...

  7. Javascript 16进制转有符号的10进制整数

    在赶项目中开发一个单片机对应的数据接口,需要将一个两字节的十六进制转化为-256~255的10进制数.百度了好久都没有对应且简明的教程,干脆就自己写一篇.   我们都知道JavaScript整数类型有 ...

  8. 16进制字符串和byte数组进行相互转换\将10进制转换为任意进制

    16进制字符串和byte数组进行相互转换 简介 1个byte对应8个bit,16进制使用4个bit,所以一个byte转成16进制,占用两位. JAVA代码 private static final c ...

  9. python中2进制、10进制、16进制等之间的转换

    10转2: bin(8) # '0b1000' 2转10: int( 10转16: hex(15) # '0xf' 16转10: int( 2进制和16进制中间通过转10进制可以相互转换 from b ...

随机推荐

  1. iwpriv

    AuthMode             {OPEN,SHARED,WEPAUTO,WPAPSK,WPA2PSK,WPANONE} ::Set Authentication Mode EncrypTy ...

  2. C基础--函数参数副本

    转自:http://blog.csdn.net/chujiangke001/article/details/38553173 void GetMemory(char *p, int num) { p ...

  3. 兼容所有浏览器---无缝上下左右交叉运动----原生js+css

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. Excel 操作类

    转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code hi ...

  5. PLSQL_性能优化系列05_Oracle Hint提示

    2014-06-20 Created By BaoXinjian

  6. Codeforces Round #356 (Div. 2)A. Bear and Five Cards(简单模拟)

    A. Bear and Five Cards time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  7. ZOJ 3601 Unrequited Love 浙江省第九届省赛

    Unrequited Love Time Limit: 16 Seconds      Memory Limit: 131072 KB There are n single boys and m si ...

  8. Yii2.0 实现三级联动 [ 2.0 版本 ]

    view中代码 <?php use yii\bootstrap\ActiveForm; /* @var $this yii\web\View */ /* @var $form yii\boots ...

  9. python 抓取javascript 动态数据

    1. 新安装一个python库 :~$ sudo pip install seleniumhq 2. 编写代码: 以获取百度百科点赞数为例 import selenium from selenium ...

  10. Access“存储过程"参数顺序要与执行代码生成的参数顺序一致

    OleDbParameter olp; OleDbCommand cmd = new OleDbCommand("insertYjsData"); olp = new OleDbP ...