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

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

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

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

     

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

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

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

        

      从这个过程中,我们可以想到,这个过程可以用一个for循环输出a[i]*(b^i)做加法(其中a[i]为存放着各个位上值的数组,b为初始值的进制)。我们首先就需要把初始值的各个位上的值放入数组a[i]中,这是我们需要定义的第个方法,将其命名为Fenjie,作用是把初始值数组化。把初始值数组化之后,我们就要将其先转换为十进制数了,再进行进制转换,这是需要定义的第二个方法,我们将其命名为Zhuanhuan1,作用是把数组化的初始值转换为十进制数。接下来就是把转换好的十进制数转为目标进制数了,再定义我们的第三个方法,将其命名为Zhuanhuan2,作用是把转换后的十进制数再转换为目标进制数。在这里,我们需要思考一个问题,十进制数在转换为目标进制数时,使用的是除其进制而后取余,余数从上往下,但我们需要的是从下往上,就像这样

             

因此,我们需要定义第四个方法Jiaohuan或者用for循环输出时,用减循环将数组倒着输出来。

最后再来理一下这个进制转换的过程:初始值如果非十进制,则先调用Fenjie方法进行数组化,数组化后的初始值调用Zhuanhuan1方法转为十进制,十进制数再调用Zhuanhuan2方法转换为目标进制数。至于初始值是十进制的,直接调用Zhuanhuan1方法进行转换就ok了。


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值