【问题标题】:Converting between number systems with arbitrary base在具有任意基数的数字系统之间转换
【发布时间】:2012-06-12 21:17:42
【问题描述】:

考虑一种情况,其中需要以下功能:

convert(val1, base1, base2)

它将数字 (val1) 从 base1 数字系统转换为 base2 数字系统。在这个函数中,所有参数都是字符串,例如

convert("34", "012345", "01234567890ABCDEF") 

被调用以转换 346 -> X16

当我开始考虑实现时,很明显将具有较大基数的数字转换为较小的数字需要为较大基数的数字定义除法运算,例如1210 -> X2 = 12 / 2 | 6 / 2 | 3 / 2 | 1 / 2 | = 11002.

接下来是关于进行两步转换 Xb1 -> X10 -> Xb2。这肯定更容易实现,但是伙计们,你能确认我之前的结论没有错吗,或者有没有明确的方法来实现这样的convert() 函数而无需中间到十进制转换?

谢谢!

【问题讨论】:

  • 你在这里选择什么编程语言?

标签: algorithm math logic


【解决方案1】:

假设您在计算机程序中寻找实用的解决方案,您不想转换为以 10 为基数的中间值,而是转换为计算机的本机表示,其基数无关紧要。编写两个单独的函数,一个将字符串解析为整数,另一个将整数转换为字符串。

【讨论】:

  • 谢谢你,Russell,转换为二进制而不是十进制作为中间值的好点。
  • 但是从实际的角度来看,我还是会写转换为base 10的代码。
  • 为什么?从右到左遍历字符串,乘以输入基数的基数(在您的示例中为 6)并在每一步添加字符的值。这给了你一个本机机器整数。然后通过输出基数的基数(在您的示例中为 16)执行连续的 div-and-mod 以从右到左构建输出字符串。除非您决定打印中间值作为健全性检查,否则根本不涉及 Base 10。
猜你喜欢
  • 2016-08-26
  • 1970-01-01
  • 2015-12-06
  • 2010-09-26
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多