进制之间转换的实现(一) 从想法到思路

       最近几天,在编写代码的时候,用到了进制相关的知识,在请教同学的时候,给发来了一个链接。上面有封装好的关于进制转换的方法,突发奇想,我能不能自己把进制的转换实现了呢?

       在这里暂且只讨论整型正数,二、八、十、十六进制之间的相互转换,以后可能会对非整型负数和其他进制进行补充。

       首先,我研究了进制之间相互转换的方法,如下:

     

       从转换关系中,我们推出发现一个结论:任何进制数在转换成十进制数时,均为按权展开相加求和;十进制数在转换成任何进制数时,均为除其进制取余(这两个结论应该不止仅限于二、四、八、十六进制的相互转换)。那么,我们可以选取十进制作为中间进制,即在进行进制转换时,先把初始进制数转换为十进制数,再转换成目标进制数。

       接下来,我们来详细研究一下这个过程。既然以十进制为中间进制,那么我们就需要分为两种情况进行讨论,初始值的进制是十进制 的和不是十进制的

       首先我们讨论的是初始值不是十进制的情况,因为它相对复杂一些。我们在得到初始值后,需要将其按权展开相加求和,在这之前,我们先来了解一下什么是按权展开相加求和,简单来说就是将其各个位上的数乘以其进制的n(n是这个位上数是这个数的第n位)次方,这样可能比较难以理解,我们来举个例子。

        

这是个比较有趣的问题,需要定的数学思维和编程能力。我可以给你思路和建议,希望能帮助你解决问题。 首先,我们需要先明确进制转换的原理。以将个十进制转换为二进制数为例,转换过程如下: 1. 将十进制数不断除以2,得到的商和余数分别是新的商和二进制数的下位数字。 2. 重复步骤1,直到商为0,最后得到的二进制数就是所求的结果。 例如,将十进制数9转换为二进制数的过程如下: 9 ÷ 2 = 4 余 1 4 ÷ 2 = 2 余 0 2 ÷ 2 = 1 余 0 1 ÷ 2 = 0 余 1 因此,9的二进制数为1001。 现在,考虑逆向程序如何得到正确的十进制数。假设我们已经得到了个错误的二进制数,我们可以将它转换回十进制数,然后分别将这个十进制数加1和减1,得到两个新的十进制数。然后,将这两个新的十进制数分别转换为二进制数和三进制数,比较这两个二进制数和三进制数是否与原来的错误二进制数和三进制数相同,如果相同,则说明这两个新的十进制数中有个是正确的,否则需要继续尝试其他的加减操作。 具体实现这个算法,可以使用编程语言来完成。下面是个简单的Python代码示例: ``` def convert_to_decimal(binary): decimal = 0 for i in range(len(binary)): decimal += int(binary[i]) * 2**(len(binary)-1-i) return decimal def convert_to_binary(decimal): binary = "" while decimal > 0: binary = str(decimal % 2) + binary decimal //= 2 return binary def convert_to_ternary(decimal): ternary = "" while decimal > 0: ternary = str(decimal % 3) + ternary decimal //= 3 return ternary def reverse_program(binary, ternary): decimal = convert_to_decimal(binary) decimal_plus = decimal + 1 decimal_minus = decimal - 1 binary_plus = convert_to_binary(decimal_plus) binary_minus = convert_to_binary(decimal_minus) ternary_plus = convert_to_ternary(decimal_plus) ternary_minus = convert_to_ternary(decimal_minus) if binary == binary_plus or ternary == ternary_plus: return decimal_plus elif binary == binary_minus or ternary == ternary_minus: return decimal_minus else: return None ``` 在这个代码中,convert_to_decimal函数将个二进制转换为十进制数,convert_to_binary函数将个十进制转换为二进制数,convert_to_ternary函数将个十进制转换为三进制数,reverse_program函数是逆向程序的主要函数,它接受两个参数,个错误的二进制数和个错误的三进制数,返回个正确的十进制数。 你可以使用这个代码进行测试,验证算法的正确性。同时,你也可以对这个代码进行优化和改进,以提高程序的效率和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值