Python数据结构与算法 7栈的应用之进制转换

数据结构与算法Python版之北大慕课笔记(一) 数据结构与算法一、“变位词”判断问题1. 解法一:逐字检查2. 解法二:排序比较3. 解法三:计数比较二、线性结构linear structure1. 四个线性结构2. 栈的应用三、表达式转换及求值1. 中缀表达式2. 前缀和后缀表达式3. 中缀转换为前缀/后缀表达式3.1 通用的中缀转后缀算法4. 后缀表达式求值 一、“变位词”判断问题 问题描述:变位词是指两个词之间存在组成字母的重新排列关系。... 阅读详情

Converting Decimal Numbers to Binary Numbers

栈的应用:进制转换

In your study of computer science, you have probably been exposed inone way or another to the idea of a binary number. Binary representation is importantin computer science since all values stored within a computer exist as a stringof binary digits, a string of 0s and 1s. Without the ability to convert backand forth between common representations and binary numbers, we would need tointeract with computers in very awkward ways.

在学习计算机过程中,你总会被以这样那样的方式灌输二进制的思想。的确,计算机内部数据就是二进制存储的,所有的数据都是由0和1组的成串。幸亏二进制和日常数据格式之间能够相互转换,不然计算机可就一点不好玩了。

Integer values are common data items. They are used in computerprograms and computation all the time. We learn about them in math class and ofcourse represent them using the decimal number system, or base 10. The decimalnumber 23310 and its corresponding binary equivalent 111010012are interpreted respectively as

计算机程序里,整数无处不在,我们在数学课上也学习整数,当然是十进制的整数,或者说叫做以10为基数的整数。十进制的23310           在二进制里表示为:111010012,或者按权展开成为:

2×102+3×101+3×100

 

and

和

1×27+1×26+1×25+0×24+1×23+0×22+0×21+1×20

 

But how can we easily convert integer values into binary numbers?The answer is an algorithm called “Divide by 2” that uses a stack to keep trackof the digits for the binary result.

有一种很容易地把十进制转为二进制的方法,叫做“除二取余法”,用栈来保存二进制的位。

The Divide by 2 algorithm assumes that we start with an integergreater than 0. A simple iteration then continually divides the decimal numberby 2 and keeps track of the remainder. The first division by 2 givesinformation as to whether the value is even or odd. An even value will have aremainder of 0. It will have the digit 0 in the ones place. An odd value willhave a remainder of 1 and will have the digit 1 in the ones place. We thinkabout building our binary number as a sequence of digits; the first remainderwe compute will actually be the last digit in the sequence. As shown in Figure5, we again see the reversal property that signals that a stack is likely to bethe appropriate data structure for solving the problem.

这种算法从一个大于0的整数开始,通过递归法连续除以2,并保存除2得到的余数。第一次除以2可以判断这个数是偶数还是奇数。偶数除以2的余数是0,这个二进制位就0;奇数除以2的余数是1,这个位就是1。这样连续相除得到一串的0或1,第1次得到的位实际是最后一位。如图5所示,我们又一次见到了需要反转顺序的性质,这就表明需要利用栈的特性来解决问题了。


 

The Python code in ActiveCode 6 implements the Divide by 2algorithm. The function divideBy2 takes an argument that is a decimal numberand repeatedly divides it by 2. Line 7 uses the built-in modulo operator, %, toextract the remainder and line 8 then pushes it on the stack. After thedivision process reaches 0, a binary string is constructed in lines 11-13. Line11 creates an empty string. The binary digits are popped from the stack one ata time and appended to the right-hand end of the string. The binary string isthen returned.

算法的Python代码如下,函数divideBy2()的参数是一个十进制整数,连续被2除。第7行使用了python操作符%取得余数。第8把得到的余数压栈,当商是0的时候,11-13行形成一个二进制字符串。11行是建立空串,二进制位被从栈中一个一个被弹出,同时被追加到空字符串的右端(append),最终返回一个二进制字符串。

from pythonds.basic.stack import Stack

 def divideBy2(decNumber):
    remstack = Stack()
 
    while decNumber > 0:
        rem = decNumber % 2
        remstack.push(rem)
        decNumber = decNumber// 2
 
    binString = ""
    while notremstack.isEmpty():
        binString = binString+ str(remstack.pop())
 
    return binString
 
print(divideBy2(42))


 

The algorithm for binary conversion can easily be extended toperform the conversion for any base. In computer science it is common to use anumber of different encodings. The most common of these are binary, octal (base8), and hexadecimal (base 16).

上面的算法很容易扩展到任意进制的转换,计算机科学比较常用二进制,八进制和十六进制。

The decimal number 233 and its corresponding octal and hexadecimalequivalents 3518 and E916 are interpreted as

十进制的233,在八进制里是3518,在十六进制就是 E916

按权展开式:

3×82+5×81+1×80

 

and

 

14×161+9×160

 

The function divideBy2 can be modified to accept not only a decimalvalue but also a base for the intended conversion. The “Divide by 2” idea issimply replaced with a more general “Divide by base.” A new function calledbaseConverter,shown in ActiveCode 7, takes a decimal number and any base between 2 and 16 asparameters. The remainders are still pushed onto the stack until the valuebeing converted becomes 0. The same left-to-right string construction techniquecan be used with one slight change. Base 2 through base 10 numbers need amaximum of 10 digits, so the typical digit characters 0, 1, 2, 3, 4, 5, 6, 7,8, and 9 work fine. The problem comes when we go beyond base 10. We can nolonger simply use the remainders, as they are themselves represented astwo-digit decimal numbers. Instead we need to create a set of digits that canbe used to represent those remainders beyond 9.

函数divideBy2修改一下能用于转换其他进制,“除二取余法”就得改成“除基取余法”了,新函数名为baseConverter,代码如下。第一个参数是任意二进制整数,第二个参数是2到16之间的基数,余数仍被压栈,直到商为0。从左到右的字符串生成过程也是一样的。不过当基数超过10以后,问题就来了,因为栈内的余数是2位的十进制数!

 

 

 from pythonds.basic.stackimport Stack
 
def baseConverter(decNumber,base):
    digits ="0123456789ABCDEF"
 
    remstack = Stack()
 
    while decNumber > 0:
        rem = decNumber % base
        remstack.push(rem)
        decNumber = decNumber// base
 
    newString = ""
    while notremstack.isEmpty():
        newString = newString+ digits[remstack.pop()]
 
    return newString
 
print(baseConverter(25,2))
print(baseConverter(25,16))
 

A solution to this problem is to extend the digit set to includesome alphabet characters. For example, hexadecimal uses the ten decimal digitsalong with the first six alphabet characters for the 16 digits. To implementthis, a digit string is created (line 4 in Listing 6) that stores the digits intheir corresponding positions. 0 is at position 0, 1 is at position 1, A is atposition 10, B is at position 11, and so on. When a remainder is removed fromthe stack, it can be used to index into the digit string and the correctresulting digit can be appended to the answer. For example, if the remainder 13is removed from the stack, the digit D is appended to the resulting string.

上面的解决办法是建立一个集合,包括一些字母符号。比如十六进制使用了6个字母,所以4行建立一个字符串存储相应位置的字符,如0在0位上,1在1位上,A在10位上,B在11位上,如此等等。当一个余数被出栈时,以自己为索引到这个字符串上找到正确的字符并追加到答案的后面。比如13出栈,13位上的D追加到结果中。

复习题

stk-3: What is value of 25 expressed as anoctal number 

25转为8进制是多少?

stk-4: What is value of 256 expressed as ahexidecimal number

256转为十六进制多少?

stk-5: What is value of 26 expressed in base26 

26在26进制里是多少?

LiveGBS流媒体平台GB/T28181实战指南:海康NVR物联网卡摄像头注册失败全链路排查与抓包技巧 本文详细解析了LiveGBS流媒体平台中海康NVR物联网卡摄像头注册失败的常见问题及解决方案。通过全链路排查与抓包技巧,包括物联网卡配置、多网卡冲突处理、防火墙设置等,帮助用户快速定位并解决GB/T28181协议下的设备注册难题,提升流媒体平台部署效率。 阅读详情

相关推荐

避开这些坑!用Python ReportLab生成PDF时字体处理与中文排版的5个关键技巧

本文针对Python ReportLab库在PDF自动化生成中常见的中文排版难题,提供了五个关键技巧。内容涵盖字体注册的稳健策略、段落样式的精细控制、表格内中文的换行对齐、页面布局管理以及性能优化,旨在帮助开发者彻底解决中文乱码、排版错位等问题,生成专业美观的PDF文档。

weixin_29250403的博客 624

python用栈实现进制转化

题目描述: 将十进制整数转化为其他进制 思路分析 将十进制转为其他进制数字,用除商取余法,然后倒着取余数部分。 “倒着取”--------栈的反转性质 “取余数”--------用字符串的拼接 我们将此函数分为两部分分析: 1、除商取余法获取余数存入栈中; 2、输出栈中元素 def convert_base(number,base): ''' 将十进制转化为其他进制 :param number: 要转化的整数,int类型 :param base: 新的进制

weixin_54958866的博客 1399

芯片设计中的复位艺术——从异步复位同步释放到复位树构建

本文深入探讨了芯片设计中复位策略的核心技术与工程实践。重点解析了异步复位同步释放这一黄金方案的原理与优势,它通过复位同步器解决了异步复位释放时的时序风险。文章进一步阐述了如何构建稳健的复位树以应对大规模SoC设计,并分析了多时钟域与低功耗场景下的复位设计挑战,为提升芯片可靠性提供了系统性的方法论。

neovim7hacker的博客 486

利用栈实现进制转换-python

类通常包含以下几个主要方法和属性: 将十进制数转换为其他进制的核心逻辑 测试十进制数转换为其他进制 运行结果

inn40的博客 918

opencv+nvcodec实现视频硬解码

最近遇到一个新项目,AI推理在上,为了方便和节省成本的考虑决定研究下模块。根据官网的说法显卡具有独立的和模块,所以理论上和是独立互不干涉的。以前的项目都只是把显卡当成推理工具,没有将它的功能利用起来,本身也是一种浪费。事实真的有这么丝滑吗?看到这里,如果你真的觉得是白叫的那就真的是了,事实究竟如何,请听我娓娓道来。NVCODEC全称是 NVIDIA VIDEO CODEC,是NVIDIA为绝大多数显卡配置的硬件编解码单元。不一定是所有显卡都有,一般来讲越新的显卡硬件编解码就越强,支持的格式也就越新。

jiexijihe945的博客 1万+

告别Link180!在Ansys Mechanical 2020R2中正确启用Cable280绳索单元(附Beta选项开启指南)

本文详细介绍了在Ansys Mechanical 2020R2中启用Cable280绳索单元的全过程,包括Beta选项的开启步骤、建模技巧及高阶应用。Cable280作为专为绳索仿真设计的单元,相比传统的Link180单元,在大变形模拟和计算效率上表现更优,特别适合斜拉桥、电梯牵引绳等工程场景。

weixin_33711647的博客 405

掌握 Python 栈,轻松实现进制转换

栈(Stack)是计算机科学中常用的数据结构,具有众多实际应用。其中之一是使用栈来实现进制转换,将一个数字从一种进制表示转换为另一种进制表示。本文将深入研究栈的原理,以及如何使用Python实现十进制到二进制、八进制和十六进制的进制转换。我们将提供详细的解释和多个示例,帮助您深入理解这一概念。

aobulaien001的博客 1199

RK3588开发板RKNPU2环境部署实战:更新rknn_server与librknnrt.so详解

本文详细介绍了在RK3588开发板上更新rknn_server与librknnrt.so核心组件的完整实战流程。通过adb工具推送文件、设置权限并执行同步操作,确保RKNPU2环境部署成功,从而解决推理速度慢或初始化失败等问题,提升AI模型运行效率与稳定性。

weixin_29194817的博客 341

用栈实现进制转换(Python)

【代码】用栈实现进制转换(Python) 数据结构

C语言/数据结构/数学建模/深度学习/生物信息 1432

Win10系统下海思SS928开发板烧写工具ToolPlatform-1.0.11安装避坑指南

本文详细介绍了在Windows 10系统下安装和配置海思SS928开发板烧写工具ToolPlatform-1.0.11的完整流程与避坑指南。核心解决了JVM内存配置导致的界面卡顿、闪退问题,并提供了驱动安装、硬件连接、镜像烧写的实战步骤,帮助嵌入式开发新手快速搭建稳定的烧写环境。

kite3的博客 454

姿态传感器/陀螺仪之ICM-42670-P应用原理图设计

ICM-42670-P采用LGA-14封装,尺寸为2.5x3x0.76毫米,工作电压范围为1.71V至3.6V,支持I3CSM、I2C和SPI串行通信接口。其设计目标是提供高精度、低功耗和小型化的解决方案,以满足消费类和工业应用的需求。ICM-42670-P是一款由TDK InvenSense推出的高性能六轴MEMS运动追踪传感器,集成了3轴陀螺仪和3轴加速度计,适用于多种应用场景,包括可穿戴设备、游戏控制器、无人机、AR/VR设备等。

corlin6688的博客 1205

Python用栈来实现任意进制转换

【代码】Python用栈来实现任意进制转换。

weixin_52270382的博客 718

2025华为od机试真题B卷【版本管理】Python实现

在 软件版本管理中,版本号由点分割的数字组成,例如 1.2.3 和 2.8。现在,你需要编写一个函数,计算两个版本号之间的可用版本号个数。这里的可用版本号指的是所有满足 version1<x<version2的版本号x的个数。若 version1 >=version2 返回0.,

MISAYAONE的博客 644

pythonds.basic.stack,Python数据结构与算法 7栈的应用之进制转换

Converting Decimal Numbers to Binary Numbers栈的应用:进制转换In your study of computer science, you have probably been exposed inone way or another to the idea of a binary number. Binary representation is imp...

weixin_42299198的博客 599

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

周末作业。

8不会.....只会两个stack

Micro_organism的博客 105

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数据结构与算法Python版 栈的应用

栈的应用示例:十进制转换成其它进制、中缀表达式转换成后缀表达式,以及利用栈对后缀表达式求值。

分享、交流、合作 1394

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【python数据结构与算法】列表实现栈及栈的应用

栈的数据结构 Python的基本数据类型list是实现栈的基础 通过使用列表的方法,可以实现栈的特性: 列表访问实际上就是对数组的访问,python数组访问非常方便,可以直接通过指定下标分片。 因此,我们有两种实现方式:将列表首端作为栈顶或列表尾端作为栈顶。 这两种实现的算法复杂度是不一样的,因为列表的内存地址是连续的,列表对象寻址实际上是找到列表开始的元素所在的内存地址,尾端实现的栈可以直接在列表尾端追加或删除元素,首端实现的栈,需要将所有元素在内存中移动一遍,因此算法复杂度是O(n) 尾端实现栈顶的p

Sarah的博客 682

python数据结构与算法 1 栈的实现与应用

Python 数据结构与算法1(栈) 线性结构 什么是线性结构? 1线性结构是一种有数据项的集合,其中每个数据项都有唯一的前驱和后继。除了第一个没有前驱,最后一个没有后继。新的数据项加入到数据集中是,只会加入到原有某个数据项之前或之后。具有这种性质的数据集,就称为线性结构 2线性结构总有两端,在不同的情况下,两端的称呼也不相同,有时候称为“左”“右”端、“前”“后”端、“顶”“底”端 3两端的称呼...

rhythmcc的博客 693

Python[数据结构及算法 --- 栈]

1>.Stack ():创建一个空栈,不包含任何数据项<2>.push (item):将 item 加入栈顶,无返回值<3>.pop ():将栈顶数据项移除,并返回,栈被修改<4>.peek ():“窥视” 栈顶数据项,返回栈顶的数据项但不移除,栈不被修改<5>.isEmpty ():返回栈是否为空栈<6>.size ():返回栈中有多少个数据项。

2402_88564782的博客 1753

【数据结构与算法】栈及Python实现

目录1 栈抽象数据类型及Python实现1.1 抽象数据类型Stack1.2 Python实现ADT Stack2 栈的应用2.1 简单括号匹配算法2.2 通用括号匹配算法 1 栈抽象数据类型及Python实现 定义: 一种有次序的数据项集合,在栈中,数据项的加入和移除都仅发生在同一端,这一端叫栈 “ 顶top ” ,另一端叫栈 “ 底base” 特性: 反转次序,进栈和出栈的次序正好相反 1.1 抽象数据类型Stack Stack() :创建一个空栈,不包含任何数据项 push(ite

CharlieTang的博客 977

数据结构与算法(python版)之栈

数据结构与算法(python版)之栈一、什么是栈二、栈的特性:反转特性三、栈的6个基本操作四、用python实现ADT Stack1.思路:2.实现细节:3.代码实现:五、栈的应用一:括号匹配1.括号平衡规则2.思路3.程序流程图 一、什么是栈   抽象数据类型“栈”是一个有次序的数据集,每一个数据仅从“栈顶”一端加入到数据集中或从数据集中移除,栈具有后进先出LIFO特性。 二、栈的特性:反...

weixin_43951995的博客 753

LeetCode讲解算法2-数据结构[栈和队列](Python版)

LeetCode讲解算法2-数据结构[栈和队列](Python版)

总裁余(余登武)博客 1426

深入理解Python 如何实现进制转换

使用Python实现十进制到二进制、八进制和十六进制的进制转换。我们将提供详细的解释和多个示例,帮助您深入理解这一概念。了解进制转换在计算机科学和数学中,进制是一种表示数字的方式,它决定了一个数字的基数和表示规则。最常见的进制包括:十进制(Decimal):基数为10,使用0-9这10个数字表示。二进制(Binary):基数为2,使用0和1表示。八进制(Octal):基数为8,使用0-7表示。十六进制(Hexadecimal):基数为16,使用0-9和A-F表示。每种进制都有其独特的特点和应用场景。进制转换

m0_58477260的博客 1378

python栈应用_python基本数据结构类型--栈的应用

python基本数据结构类型--栈的应用北大地空《数据结构与算法》笔记 by dlnb5262020.3本文中的代码来自课程页面。在上一篇笔记中,学习了栈的相关概念。在这篇笔记中我记录了利用栈来实现的两个功能,主要是加深对栈概念的理解。首先回顾之前栈的建立# Bradley N. Miller, David L. Ranum# Introduction to Data Structures and...

weixin_39690097的博客 66

Python数据结构与算法篇(七)-- 栈的实现与应用

本节主要学习栈的抽象数据类型,主要包括出栈、进栈、栈的大小、栈顶元素、栈是否为空,最后实现括号匹配和十进制转换为二进制来理解栈的反转次序、先进后出的特性。

CarpeDiem 1385

python数据结构与算法(1):栈的概念与实现

''' 1.如何理解栈? 栈的特性是后进先出(LIFO),所以提供了“反转”的属性,当涉及到顺序反转时,栈应该是首选的数据结构 2.栈的应用? 栈的应用极其广泛,最基本的算法如:符号匹配、进制转换、前中后缀表达式的转换和计算, 此外函数中的局部变量也储存在栈中,这样最近存入的返回值可以先提出,一些树和图的算法中也会利用到栈。 ''' #python实现栈 '''首先是栈的构造和析构,其次是...

KageYamaa的博客 406
上一篇: python数据结构与算法 6栈的应用之符号平衡(通用)
下一篇: python数据结构与算法 8栈的应用之中缀前缀后缀
杀了这个男孩
博客等级 码龄18年 149粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值