Python算法100例-1.10 数制转换

本文详细介绍了如何通过算法设计实现不同数制间的转换,包括字符与数字的转换,以及使用Python编写程序处理输入的M进制数向非M进制数的转换,涉及字符数组、权值计算和循环控制结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完整源代码项目地址,关注博主私信'源代码'后可获取

1.问题描述

给定一个M进制的数x,实现对x向任意一个非M进制的数的转换。

2.问题分析

掌握不同数制间的转换关系是解决本题的关键,这里所说的数制一般包括二进制、八进制、十六进制及十进制。除了不同的数制之外,还有几个必须要了解的概念:

·基数:在一种数制中,只能使用一组固定的数字来表示数的大小。具体使用多少个不同的数字来表示一个数值的大小,就称为该计数制的基数(Base)。如十进制的基数为10、二进制的基数为2等。

·:又称为位权或权值,即每一个数位都有一个固定的基值与之相对应。如十进制的个位对应的权值为1(100),十位对应的权值为10(101),百位对应的权值为100(102),对于一个M进制的数来说,小数点左边各位上对应的权值从左到右分别为基数的0次方、基数的1次方、基数的2次方等,对于小数点右边各位上对应的权值从右到左分别为基数的-1次方、基数的-2次方等。

二进制、八进制、十六进制向十进制转换的方法为:按权展开相加

十进制转换成二进制、八进制、十六进制的方法为:整数部分除以基数取余数(取余的方向为从后向前),小数部分乘以基数取整数(取整的方向为从前向后)

二进制、八进制、十六进制相互转换的方法为:先转换成十进制再转换成其他进制;或者按照其对应关系进行转换(3位二进制数对应一位八进制数,4位二进制数对应一位十六进制数)。

本题按照前一种转换方式进行编程。

3.算法设计

十六进制是由0~F这一组固定的数字来表示的,所以采用字符数组进行存储。在进行输入、输出时,数组元素都是以字符的形式存在的,但是在进行数制转换时数组元素又以数字的形式存在,程序中我们用两个自定义函数*char_to_number()number_to_char()*来实现字符与其对应数字之间的转换。

在执行程序时我们希望可以输入多组数据来验证程序的正确性,以前的程序都是多次运行,输入不同的数据来实现。我们对程序稍做改进,使只运行一次程序但可以输入多组数据进行验证。解决这个问题只需要加一层循环,如果循环条件为真则继续输入数据,否则退出。循环条件为真即表达式的值不为0,这样我们可以利用一个变量假设为flag,利用语句“while flag:循环体”来进行控制,当flag的值为1时我们可以接着输入,若为0则结束循环。

4.确定程序框架

程序主体框架如下:

if __name__ == '__main__':
    MAXCHAR = 101                                   # 允许的最大字符串长度
    flag = 1                                        # 存储是否退出程序的标志
    while flag:                                     # 利用输入的flag值控制循环是否结束
         # 将原数转换成十进制数
         # 求出转换成目标数制后字符数组的长度
         # 逆序打印字符数组
         print("继续请输入1,否则输入0:")
         flag = int(input())

5.字符与数字进行转换

将输入或存储的字符转换为对应的数字,可以分两类进行考虑:第一类是介于’0’到’9’之间的字符,转换成相应的数字0~9时,可利用其ASCII码之间的对应关系。字符’0’的ASCII码为48,'1’的ASCII码为49,‘1’-‘0’=1(在0~127之间字符型与整型是可以通用的)得到的差即为字符ch对应的数字。第二类是介于’A’到’Z’之间的字符,字符’A’对应的数字为10,'B’对应的数字为11,其他字母以此类推。

值得高兴的是,Python为我们提供了以下函数,用于实现数字、字母和字符之间的转换

  ·int(x):将其他类型转换成数字。

  ·ord(x):将字符转换成对应的Unicode码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘逸高铁侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值