代码(一) 进制转换
背景
总结所有进制转化问题
十进制转二十六进制
问题描述
在Excel中,列的名称是这样一个递增序列:A、B、C、…、Z、AA、AB、AC、…、AZ、BA、BB、BC、…、BZ、CA、…、ZZ、AAA、AAB…。我们需要将上述列名序列和以下自然数序列相互转换:1、2、3、…。
问题分析
正常而言,一个十进制数可以如下转换为二十六进制数
n u m = a 0 × 2 6 0 + a 1 × 2 6 1 + a 2 × 2 6 2 + . . . . num = a_{0} \times 26^{0} + a_{1} \times 26^{1} + a_{2} \times 26^{2} + .... num=a0×260+a1×261+a2×262+....
其中 a i ∈ [ 0 , 25 ] a_{i} \in [0, 25] ai∈[0,25]。从题意可知,现在对应关系为
A ⟶ 1 B ⟶ 2 Z ⟶ 26 A Z ⟶ 52 A \longrightarrow 1 \\ B \longrightarrow 2 \\ Z \longrightarrow 26 \\ AZ \longrightarrow 52 A⟶1B⟶2Z⟶26AZ⟶52
此时,进制转换公式如下
n u m = b 0 × 2 6 0 + b 1 × 2 6 1 + b 2 × 2 6 2 + . . . . num = b_{0} \times 26^{0} + b_{1} \times 26^{1} + b_{2} \times 26^{2} + .... num=b0×260+b1×261+b2×262+....
其中 b i ∈ [ 1 , 26 ] b_{i} \in [1, 26] bi∈[1,26]。因此原始问题转化为,如何从公式一转化为公式二。在进制转化时,使用辗转相除法。首先考虑余数的区别:
- 当 b 0 = 1 , 2 , . . . , 25 b_{0} = 1,2,...,25 b0=1,2,...,25时, a 0 = b 0 a_{0} = b_{0} a0=b0
- 当 b 0 = 26 b_{0} = 26 b0=26时, a 0 = 0 a_{0} = 0 a0=0
此外,商的区别可以通过减掉 b 0 × 2 6 0 b_{0} \times 26_{0} b0×260消减。
代码
def func(K):remain = Kbuff = []while(remain > 0):mod = remain % 26mod = mod if mod != 0 else 26buff.append(mod)remain = int((remain - mod) / 26)buff = [chr(ord('A') + v - 1) for v in buff]return "".join(buff[::-1])
十进制转十六进制
问题解析
问题比较简单,直接使用辗转相除法即可。另外,移位运算可以简化计算流程。
代码
def func(k):index2char = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']remains = kbuff = []while(remains > 0):buff.append(remains & 15)remains = remains >> 4buff = [index2char[v] for v in buff[::-1]]return "".join(buff)
代码(一) 进制转换相关推荐
- python代码实现进制转换
进制之间的转换用代码实现 # 进制转换 # 方法一:win + r 输入calc打开程序员计算器 # 方法二:通过代码实现# 其他进制转换为十进制 # 1:二进制-->十进制 print(&qu ...
- java的代码之进制转换(2,8,16与10进制转换)
文章目录 一.2,8,16进制转换成10进制 二.10进制转换成2,8,16进制返回STRING 三.自己写的十进制转换成十六进制 一.2,8,16进制转换成10进制 使用Integer.parseI ...
- 黑马程序员——代码实现进制转换
---------------------- android培训 java培训 期待与您交流! ---------------------- 系统提供的进制转换为Integ ...
- 黑马程序员_程序代码实现进制转换
---------------------- android培训 java培训 期待与您交流! ---------------------- 系统提供的进制转换为Intege.t ...
- 每日一题(进制转换)
前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...
- C语言栈实现进制转换
栈-10进制任意转换 设计思路 例如讲10进制转换为2进制计算思路为: 利用循环将每一个余数都压入栈中,再遍历出栈 转换代码: /*进制转换 */ scStack *sysConvert(int nu ...
- 数据结构之栈 篇四——栈应用实现进制转换
在前面博客的基础上,应用栈实现进制转换, 主要思想就是短除法,我们利用栈的先进后出的功能来实现逆向输出即可. 下面代码还需要篇三里面的文件,MyStack.h 1.应用一,简单篇 #include & ...
- html进制转换js代码,JS中的进制转换以及作用
js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: 运行下面代码 //10进制转为16进制 (10).toString(16) ...
- python转换函数使用_python进制转换函数代码的使用
python进制转换函数代码的使用 发布时间:2020-04-23 10:23:22 来源:亿速云 阅读:188 作者:小新 以上就是python进制转换函数代码的使用的详细内容了,看完之后是否有所收 ...
最新文章
- 数据通信技术(四:链路聚合)
- 数论基础--矩阵快速幂 及其例题
- [力扣] 501. 二叉搜索树中的众数
- PHP 实现归并排序算法
- BGP聚合as-set advertise-map
- Linux内核中的GPIO系统
- 大家都关注的Serverless,阿里怎么做的?
- Python爬虫之xpath的详细使用(爬虫)
- java 静态方法 构造方法,Java构造函数和静态方法
- linux中类似append的命令,Linux技巧:介绍 tar 命令打包、压缩、和加解密的用法
- 可自定义存储数据总空间的的类int_128函数库
- 点到点法式平面投影点的计算
- 服务器与客户端的TCP连接
- Fortran和C/C++混合编程学习笔记(一):编译链接
- “大白兔”迎来60岁生日 各类衍生品受青睐
- 微信小程序控制低功耗蓝牙
- MySQL查询分析器EXPLAIN
- ios拉伸图片某部分,九点图
- “京喜”来袭,下沉拼购市场进入2.0时代
- 百度文库内容收集方法