c++描述将一个2进制数转化成10进制数(用到初始化栈,进栈,入栈)
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进制数(用到初始化栈,进栈,入栈)相关推荐
- n进制快速转化成10进制
n进制快速转换成10进制,不用中间值,直接快速循环累乘并添加最后一位即可.在这里,假设输入的k进制是以字符串形式的.同时,注意下快速映射Map数组的使用. #include <bits/stdc ...
- 将BCD码转化成10进制数
1:目的 将BCD码转化成10进制数,并按照低位到高位的形式组合在一起.例如0x23和0x45 转化成 十进制4523 2:实现 /********************************** ...
- 16进制转带符号的10进制,16进制转负数10进制
16进制转带符号的10进制,16进制转负数10进制 看代码 echo '<pre>'; $str = 'd8f1'; function hex_dec($str){// 一般说明带符号 第 ...
- # 将微博地址里面的62进制字符串转换成10进制的16位数字mid
# 将微博地址里面的62进制字符串转换成10进制的16位数字middef base62_decode(string):alphabet = "0123456789abcdefghijklmn ...
- 将8进制字符串数值转换为10进制
/* * 函数名:oct2dec * 说明:将8进制字符串数值转换为10进制 */ function oct2dec($bin){ // strrev() 函数反转字符串 $temp = strrev ...
- 16进制数组转成10进制 qt_计算机组成原理(进制数及转换)
图片来源于网络 都知道计算机数据是以二进制数0和1补码的形式存储在内存中. 那你知道它们转换关系吗?那么问题来了,为什么要转换? 前面已经说过计算机数据是以二进制0和1存储,所以它们要转换为二进制存储 ...
- 16进制字符串转化为10进制数
同学在MSN CDC电话面试(可惜我在被面试的时候全然没有这么具体的问题了:))中的一个题目:将16进制的字符串转化为10进制数字,例如"1A",则对应26.题目很简单,实现起来也 ...
- 16进制转8进制 两种方法先转二进制在转8进制或先转10进制在转8进制
问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由09.大写字母AF组成的字符串,表示要转换的 ...
- 初始化栈、入栈、出栈、栈空、数制转换函数和主函数,实现1348转换成8进制的功能。
#include<stdio.h> //栈的顺序存储 #include<string.h> #include<stdlib.h> #include<mallo ...
最新文章
- RDKit | RDKit处理graph-化合物的邻接矩阵、距离矩阵和维纳指数
- java debug体系为什么不能debug到jdk里所有的代码
- nginx 安装、操作命令、基本配置与参数说明
- exit(0) exit(1) return() 3个的区别
- format函数_畅游人工智能之海 | Keras教程之后端函数(一)
- 赛锐信息:SAP之工厂设置
- Android学习--10-数据存储
- 纠结的rename命令
- [渝粤教育] 天津科技大学 人工智能导论 参考 资料
- mhvtl虚拟磁带库(提供软件包)
- Hive常用命令之MSCK REPAIR TABLE命令概述
- sharp计算机按钮配置,将Sharp TV HDMI接口连接到计算机并设置教程
- 记录一次iPhone5s的iCloud bypass经历
- 剑指offer T26 重排链表
- 解决OpenOffic不能启动的问题
- H264 无损压缩及编解码流程
- MFC 利用小型数据库Access 少步惆 教你用VC开发
- 《偏生要鲜花着景,应这急景流年》
- 【微信小程序】微信小程序提示Do not have handler in component
- 华为oj初级 学英语