背景

总结所有进制转化问题

十进制转二十六进制

问题描述

在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)

代码(一) 进制转换相关推荐

  1. python代码实现进制转换

    进制之间的转换用代码实现 # 进制转换 # 方法一:win + r 输入calc打开程序员计算器 # 方法二:通过代码实现# 其他进制转换为十进制 # 1:二进制-->十进制 print(&qu ...

  2. java的代码之进制转换(2,8,16与10进制转换)

    文章目录 一.2,8,16进制转换成10进制 二.10进制转换成2,8,16进制返回STRING 三.自己写的十进制转换成十六进制 一.2,8,16进制转换成10进制 使用Integer.parseI ...

  3. 黑马程序员——代码实现进制转换

    ----------------------    android培训    java培训   期待与您交流!    ----------------------    系统提供的进制转换为Integ ...

  4. 黑马程序员_程序代码实现进制转换

    ----------------------    android培训    java培训   期待与您交流!    ---------------------- 系统提供的进制转换为Intege.t ...

  5. 每日一题(进制转换)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  6. C语言栈实现进制转换

    栈-10进制任意转换 设计思路 例如讲10进制转换为2进制计算思路为: 利用循环将每一个余数都压入栈中,再遍历出栈 转换代码: /*进制转换 */ scStack *sysConvert(int nu ...

  7. 数据结构之栈 篇四——栈应用实现进制转换

    在前面博客的基础上,应用栈实现进制转换, 主要思想就是短除法,我们利用栈的先进后出的功能来实现逆向输出即可. 下面代码还需要篇三里面的文件,MyStack.h 1.应用一,简单篇 #include & ...

  8. html进制转换js代码,JS中的进制转换以及作用

    js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: 运行下面代码 //10进制转为16进制 (10).toString(16) ...

  9. python转换函数使用_python进制转换函数代码的使用

    python进制转换函数代码的使用 发布时间:2020-04-23 10:23:22 来源:亿速云 阅读:188 作者:小新 以上就是python进制转换函数代码的使用的详细内容了,看完之后是否有所收 ...

最新文章

  1. 数据通信技术(四:链路聚合)
  2. 数论基础--矩阵快速幂 及其例题
  3. [力扣] 501. 二叉搜索树中的众数
  4. PHP 实现归并排序算法
  5. BGP聚合as-set advertise-map
  6. Linux内核中的GPIO系统
  7. 大家都关注的Serverless,阿里怎么做的?
  8. Python爬虫之xpath的详细使用(爬虫)
  9. java 静态方法 构造方法,Java构造函数和静态方法
  10. linux中类似append的命令,Linux技巧:介绍 tar 命令打包、压缩、和加解密的用法
  11. 可自定义存储数据总空间的的类int_128函数库
  12. 点到点法式平面投影点的计算
  13. 服务器与客户端的TCP连接
  14. Fortran和C/C++混合编程学习笔记(一):编译链接
  15. “大白兔”迎来60岁生日 各类衍生品受青睐
  16. 微信小程序控制低功耗蓝牙
  17. MySQL查询分析器EXPLAIN
  18. ios拉伸图片某部分,九点图
  19. “京喜”来袭,下沉拼购市场进入2.0时代
  20. 百度文库内容收集方法

热门文章

  1. 使用vue实现手写签名功能
  2. 计算机网络要点(第二章)
  3. Android事件分发机制:示例(三)
  4. mx linux默认字体,MX Linux 17.1初体验
  5. 冰河世纪4及千金买一笑
  6. 金融知识小科普 - 北向资金
  7. 安全库存量算法及实现(原)
  8. 解决sim800c模块不能连续给多个手机号码发短信问题
  9. 金士顿固态硬盘不认盘修复_#原创新人#老司机带你玩转PC,故障之SSD篇 篇一:金士顿 V300 240G SATA3 固态硬盘 丢盘掉速解决记录...
  10. 使用日志进行调查 - SQL 注入攻击示例