进制转换(Python)

一、把10进制数转换成N进制数

将10进制数转换为N进制数通常遵循以下步骤:

  1. 将10进制数除以N,记录下商和余数。
  2. 将商作为新的被除数重复步骤1,直到商为0。
  3. 将得到的余数逆序排列,这就是所求的N进制数。

假设我们要将10进制数29转换为N=3(三进制)数。

步骤如下:

  • 29÷3=9         余数 2 
  • 9÷3=3           余数 0
  • 3÷3=1           余数 0
  • 1÷3=0            余数 1

现在,我们将余数逆序排列得到三进制数:(1002)3(1002)3​

所以,10进制数29对应的三进制数是1002

 那么我们该如何编写代码呢?

我们可以通过%来取余,//来取整,这样我们编写以下代码:

# 定义一个函数,将十进制数转换为任意进制数
def TentoB(ten, b):# 创建一个空列表,用于存储转换后的每一位数字B = []# 创建一个空字符串,用于存储最终的结果s = ''# 使用while循环,当ten大于0时,执行以下操作while ten > 0:# 计算ten除以b的余数,将其转换为字符串并添加到列表B中B.append(str(ten % b))# 更新ten的值,将其除以n并向下取整ten = ten // b# 使用for循环遍历列表N的逆序,对于每个元素ifor i in B[::-1]:# 如果i小于10,将其转换为字符串并添加到字符串s中if int(i) < 10:s += i# 否则,将i加上55(ASCII码中大写字母A的值),然后将其转换为字符并添加到字符串s中else:s += chr(int(i) + 55)# 返回字符串s作为结果return s

二、把10进制转换成N进制

将10进制数转换为N进制数,需要通过不断除以N并取余数的方式进行。

假设我们要将10进制数D转换为N进制数:

1. 首先,我们将D除以N,得到商q_1和余数r_1。余数r_1将是N进制表示中最右边的数字(即个位)。
2. 然后,我们取上一步的商q_1,再次除以N,得到新的商q_2和余数r_2。余数r_2将是N进制表示中次右边的数字(即十位)。
3. 重复这个过程,直到商为0为止。最后一个非零余数将是N进制表示中最左边的数字(即最高位)。
4. 将所有的余数从最后一个非零余数开始顺序排列,得到的就是D的N进制表示。

用数学公式表示这个过程:

D=q1​⋅N+r1

​q1​=q2​⋅N+r2​

q2​=q3​⋅N+r3

⋮​

qn−1​=0⋅N+rn

其中,r_1,r2,...,rn是N进制数的各个位的数字,且0≤ r_i < N。

最终答案是将r_n, r_{n-1}, ..., r_2, r_1按顺序排列得到的数。

 

def Btoten(B, b):"""将给定的进制数B转换为十进制数。参数:B (str): 一个表示进制数的字符串,其中每个字符都是一个数字或字母。b (int): 进制数的基数,例如二进制为2,八进制为8,十六进制为16等。返回:int: 转换后的十进制数。"""ten = 0count = len(B) - 1for i in B:ten += (dic[i] * b ** count)count -= 1return ten

但是,我们得先把 0~Z 对应的数值存下来,这样拥有键值对dict更适合。

dic = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'A': 10, 'B': 11, 'C': 12,'D': 13, 'E': 14, 'F': 15, 'G': 16, 'H': 17, 'I': 18, 'J': 19, 'K': 20, 'L': 21, 'M': 22, 'N': 23, 'O': 24,'P': 25, 'Q': 26, 'R': 27, 'S': 28, 'T': 29, 'U': 30, 'V': 31, 'W': 32, 'X': 33, 'Y': 34, 'Z': 35}

三、完整函数

输入格式

数据数据共三行。

第一行,一个十进制的整数,表示进制 B;

第二行和第三行,每行一个 B 进制数正整数。数字的每一位属于 {0,1,2,3,4,5,6,7,8,9,A,B⋯ }{0,1,2,3,4,5,6,7,8,9,A,B⋯}。

输出格式

一个 B 进制数,表示输入的两个数的和。

 def  Btoten(B,b):ten = 0count = len(B)-1for i in B:ten += (dic[i]*b**count)count -= 1return tendef Tentob(ten,b):B =[]s = ''while ten > 0:B.append(str(ten%b))ten = ten//bfor i in B[::-1]:if int(i) < 10:s += ielse:s += chr(int(i)+55)return sdic = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'A': 10, 'B': 11, 'C': 12,'D': 13, 'E': 14, 'F': 15, 'G': 16, 'H': 17, 'I': 18, 'J': 19, 'K': 20, 'L': 21, 'M': 22, 'N': 23, 'O': 24,'P': 25, 'Q': 26, 'R': 27, 'S': 28, 'T': 29, 'U': 30, 'V': 31, 'W': 32, 'X': 33, 'Y': 34, 'Z': 35}
b = int(input())
num1 = input().strip()
num2 = input().strip()
num1 = Btoten(num1,b)
num2 = Btoten(num2,b)
result = Tentob(num1+num2,b)
print(result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—解题全流程(持续更新)

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛B题 解题全流程&#xff08;持续更新&#xff09; -----基于多模态特征融合的图像文本检索 一、写在前面&#xff1a; ​ 本题的全部资料打包为“全家桶”&#xff0c; “全家桶”包含&#xff1a;模型数据、全套代码、训练好的模…

OpenLayers基础教程——使用WebGLPoints加载海量点数据

1、前言 最近遇到一个问题&#xff1a;如何在OpenLayers中高效加载海量的场强点&#xff1f;由于项目中的一些要求&#xff0c;不能使用聚合的方法加载。一番搜索之后发现&#xff1a;OpenLayers中有一个WebGLPoints类&#xff0c;使用该类可以轻松应对几十万的数据量&#xf…

汽车后视镜反射率检测光纤光谱仪:安全驾驶的守护神

在汽车的日常使用中&#xff0c;后视镜扮演着至关重要的角色。它不仅帮助驾驶员观察车辆后方的情况&#xff0c;还确保了行车的安全性。然而&#xff0c;由于各种原因&#xff0c;后视镜的反射率可能会降低&#xff0c;从而影响到驾驶员的视线范围和判断能力。为了解决这一问题…

7-Zip、7z、7za.exe 命令行用法(加解压zip文件)

文章目录 7-Zip什么是7z使用7-Zip、7z的场景 常用命令7za.exe 命令行用法 7-Zip 什么是7z 主页&#xff1a;http://www.7-zip.org/ 7z&#xff0c;全称7-Zip&#xff0c; 是一款开源软件。是目前公认的压缩比例最大的压缩解压软件。 7-Zip is free software with open sour…

windows允许指定IP段访问本地端口

虚拟机内部应用有时候需要访问windows的一些端口&#xff0c;例如数据库或Redis等&#xff0c;默认情况下&#xff0c;需关闭windows上的防火墙才可正常访问。本文通过在防火墙设置允许指定IP段进行访问来处理&#xff0c;不用每次操作都关闭防火墙。 入站规则-》新建规则 完成…

ASR工业化语音模型总结

1、wenet模型&#xff1a;WeNet语音识别实战-CSDN博客 git地址&#xff1a;GitHub - wenet-e2e/wenet: Production First and Production Ready End-to-End Speech Recognition Toolkit 生产应用方式为:使用pytorch训练&#xff0c;使用c部署。

日常总结:出现报错信息

上述代码报如下错误FATAL EXCEPTION: main Process: com.ear.myapplication, PID: 2173 java.lang.RuntimeException: com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: For input string: "2024-02-26 13:55:38"at com.ear.ams.ui.funct…

软考高项总结:第16章采购管理(二)

一、实施采购 1、实施采购过程的数据流向图 2、实施采购ITO 3、采购文档,是用于达成法律协议的各种书面文件,可包括: (1)招标文件:包括发给卖方的信息邀请书、建议邀请书、报价邀请书,或其他文件,以便卖方编制应答文件。 (2)采购工作说明书:向卖方清晰地说明目标…

掌握了这个分析方法,实现传输线阻抗5%的加工公差不是梦!

高速先生成员--黄刚 传输线阻抗控制对系统性能的重要性不言而喻&#xff0c;每一家的PCB加工板厂都在往能控制更严格的阻抗公差这个目标而不断努力。但是我们也知道&#xff0c;传输线阻抗的控制公差其实会受到PCB结构本身的因素影响&#xff0c;就好像下面这张PCB差分线的切片…

Nextcloud激活被锁用户

Nextcloud激活用户 如果docker下没有安装sudo 和 vim执行下面命令&#xff0c;安装了则跳过 #进入docker内部 #更新apt-get apt-get update #安装sudo apt-get install sudo #安装vim apt-get install vim 修改下面文件内容&#xff0c;否则执行occ命令可能报错 进入上面查询…

维修迈瑞便携式多参数监护仪Mindray MEC-1000医疗器械显示屏

迈瑞 MEC-1000 生命体征监测仪 投资迈瑞 MEC-1000 生命体征监测仪是确保所有患者需求得到满足而不会出现护理空白的绝佳方式。可连接到护士站的生命体征监测仪对于医疗专业人员来说是一个极好的资源。此外&#xff0c;购买质量最高且非常耐用的生命体征监测仪可以保护所有医疗办…

【zlm】问题记录:chrome更新引起的拉不出webrtc; 证书校验引起的放几秒中断

目录 chrome更新引起的拉不出webrtc 证书校验引起的放几秒中断 chrome更新引起的拉不出webrtc 【zlm】最新的chrome版本中的报错&#xff1a; 我有个问题event.js:8 [RTCPusherPlayer] DOMException: Failed to execute setRemoteDescription on RTCPeerConnection: Failed …

产品推荐 | 基于EV10AQ190的多通道 最大5Gsps 10bit AD FMC子卡

一、板卡概述 FMC147是一个四通道多模式AD子卡&#xff0c;完全符合VITA 57.1标准。该卡提供4个10位ADC通道&#xff0c;支持采样4、2、或1通道,采样速率为5Gsps、2.5 GSPS、1.25Gsps选择。 采样时钟可以通过一个同轴电缆连接外部提供&#xff0c;或由内部时钟源&#xff08;可…

学习笔记Day15:Shell脚本编程

Shell脚本编程 Linux系统环境 Linux系统的4个主要部分&#xff1a;内核、shell、文件系统和应用程序。 内核是操作系统的核心&#xff0c;决定系统性能和稳定性shell &#xff1a;一种应用程序&#xff0c;是用户和内核交互操作的接口&#xff0c;是套在内核外的壳&#xff…

一、Vite React+ts基础写法

文章目录 安装useStateprops 传参数据传参&#xff0c;标签嵌套传参函数传参useRef useEffect 获取dom 副作用hooks 安装 npm create vitelatest 执行后选择react ts useState 使用ts写法 type声明数据格式 import { useState } from react import ./App.css type User {a: …

进程与线程(Thread)

1.相关概念 (1). 程序(program) : 为完成特定任务&#xff0c;用某种语言编写的一组指令的集合.即指一块静态的代码. (2). 进程(progress) : 程序的一次执行过程&#xff0c;或者是正在运行中的应用程序(如正在运行的QQ&#xff0c;正在运行的网易第五人格). 每一个进程都有…

C++函数模板详解(结合代码)

目录 1. 模板概念 2. 函数模板语法 3. 函数模板注意事项 4. 函数模板案例 5. 普通函数与函数模板的区别 6. 普通函数与函数模板的调用规则 7. 模板的局限性 1. 模板概念 在C中&#xff0c;模板是一种通用的程序设计工具&#xff0c;它允许我们处理多种数据类型而不是固…

Linux系统定时备份mysql数据库

1、创建shell脚本mysql_db_backup并赋予执行权限 #!/bin/bash #备份目录 BACKUP/data/backup/db #当前时间 DATETIME$(date %Y-%m-%d_%H%M%S) echo $DATETIME #数据库地址 HOSTlocalhost #数据库用户名 DB_USERroot #数据库密码 DB_PWpwd123 #备份的数据库名 DATABASEApolloPo…

Symbol 类型必知必会

一. Symbol的概念 Symbol 是 JavaScript 中的一种新的基本数据类型&#xff0c;引入自 ECMAScript 6&#xff08;ES6&#xff09;标准。它是一种不可变且唯一的数据类型&#xff0c;可以用来创建独一无二的键&#xff08;key&#xff09;。 Symbol 的创建方式是通过调用全局的…

测试开发工程师(QA)职业到底需要干些什么?part4:安全QA

安全测试开发QA工作的主要目标是确保软件、应用程序或系统在安全方面的健壮性和可靠性。以下是安全测试开发QA工作中的一些常见任务和职责&#xff1a; 安全测试计划和策略&#xff1a;安全测试开发QA团队负责制定全面的安全测试计划和策略。他们会评估应用程序或系统的安全需求…