一尘不染

在不使用任何中间基数的情况下将数字从基数B1转换为基数B2

java

有没有一种方法可以将数字从基数B1转换为基数B2,而无需使用任何中间基数。

例如:

214(从5到16),而无需先将其转换为十进制,然后再将其转换为十六进制。

-

谢谢

Alok Kr。


阅读 212

收藏
2020-12-03

共1个答案

一尘不染

要将214 base5转换为不带中间基数的16基数,您“只是”必须知道如何直接在5基数中进行计算。

首先,您需要一张表,其中以15为底的16位数字是什么(将以10为底的基数转换为16时,您需要一个类似的表,只是更容易记住!)。该表很容易创建-
只需从0开始,然后以5为基数递增每一行,直到达到f16基数为止。

base 16 | base 5
--------+--------
      0 |  0
      1 |  1
      2 |  2
      3 |  3
      4 |  4
      5 | 10
      6 | 11
      7 | 12
      8 | 13
      9 | 14
      a | 20
      b | 21
      c | 22
      d | 23
      e | 24
      f | 30

现在,您只需要重复除以16(即31 base5)。现在,我们回想起小学时代,并使用长除法(如果这看起来很难,那是因为没有人让您学习以5为基数的时间表!):

第1步:

   ______
31 ) 214

第2步:

       3 
   ______
31 ) 214 -
     143

第三步:

       3 
   _____
31 ) 214 -
     143  
    ----
      21

因此214 base5除以31 base5的结果是3 base5余数21 base5。

这意味着base16中的最低有效数字是21 base5,您可以在表中找到的是b base16。除法的结果是3 base5-如果大于30
base5,我们将再次除法-但是不是,所以这意味着最高有效位是3 base16(再次使用表格)。

因此答案是214 base5 = 3b base16。

2020-12-03