java - 将数字从 Base B1 转换为 Base B2 而不使用任何中间基数

标签 java c++ c algorithm numbers

有没有办法在不使用任何中间基数的情况下将数字从 Base B1 转换为 Base B2。

例如:

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

--

谢谢

阿洛克克。

最佳答案

要在没有中间基数的情况下将 214base5 转换为基数 16,您“只”必须知道如何直接以基数 5 计算。

首先,您需要一张以 5 为底的 16 位数字的表格(在将 10 为底数转换为以 16 为底数时,您需要一个类似的表格,只是这样更容易记住!)。此表很容易创建 - 只需从 0 开始,每行以 5 为基数递增,直到达到以 16 为基数的 f

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(即 31base5)。我们现在回想我们的小学时代,并使用长除法(如果这看起来很难,那是因为没有人让你学习以 5 为底的时间表!):

第 1 步:

   ______
31 ) 214

第 2 步:

       3 
   ______
31 ) 214 -
     143  

第 3 步:

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

所以 214base5 除以 31base5 的结果是 3base5 余数 21base5

这意味着base16中的最低有效位是21base5,您可以在表格中找到bbase16。除法的结果是 3base5 - 如果它大于 30base5 那么我们将再次除法 - 但事实并非如此,所以这意味着最重要的数字是(使用表)3base16.

所以答案是 214base5 = 3bbase16

关于java - 将数字从 Base B1 转换为 Base B2 而不使用任何中间基数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3513793/

相关文章:

c - 位图文件的填充

java - 迭代以在索引处查找 Map 条目?

c++ - 使用模板类型参数列表中的 TYPE

java - Java NIO中ByteBuffer和CharBuffer有什么区别?

c++ - 通过 WinAPI 禁用/启用网络接口(interface)

c++ - 是否有显式实例化深层模板类的技巧?

c++ - 在保持递归性的同时使这个函数线程安全

c - 在C.scanf中输入gets之前。问题

java - java 是否支持 if-then-else 正则表达式构造(Perl 构造)?

java - 如何在 webflux 中异步解析/写入 json? ObjectMapper 方法是阻塞的