在Java中将数字在一个基数中转换为另一个基数而不使用库

时间:2015-01-24 10:15:17

标签: java

这不是一个功课问题,我太老了不能回家工作:)

所以,理想情况下,我试图将给定基数中的数字转换为另一个给定的基数。

有人可以分享逻辑,然后我可能自己编写代码。无法在网上找到任何令人惊讶的东西。

4 个答案:

答案 0 :(得分:2)

答案取决于您是否可以使用基元,例如intlong来表示。

如果可以,算法相当简单:将基数X中的数字转换为基本表示,然后将该表示转换为基数Y.

要将数字转换为基元,请使用以下算法:

  • 制作一个总计res,并将其设置为零
  • 通过表示基本X从左到右的数字编号的字符串
  • 将每个“数字”(可以用字母表示)转换为其数值
  • 将总计乘以X,然后将数字的数值添加到其中

要转换回来,请使用此算法:

  • 制作字符串构建器
  • 通过获取digit = num % Y
  • 删除最后一位数的值
  • 将数字值转换为数字字符(可能是字母)
  • 将数字字符附加到字符串构建器
  • 使用num /= Y
  • 删除表示中的最后一位数字
  • num不为零时继续
  • 反转字符串构建器
  • 中的字符串

如果您的数字对于基元来说太大,例如intlong,则需要构建一个用于保存大于基元的数字的类。我建议最初使用BigInteger,然后将其替换为您自己的实现。

答案 1 :(得分:0)

你可以试试这个:

String input = /* your input */;
int inputBase = /* your input base */;
int outputBase = /* wished output base */;

int inputInt = Integer.valueOf(input, inputBase);
String output = Integer.toString(inputInt, outputBase);

答案 2 :(得分:0)

一般算法是:

假设您在基座x中获得了一个号码。这意味着Σa i x i

  • 首先通过迭代计算上述公式将数字计算为long或BigInteger(如果太大):n = a 0 + x * a 1 + ...
  • 然后将n分解为基础y:n 0 = n,b 0 = n 0 %y

    然后迭代地:n i = n i-1 - b i-1 / y,b i = n i %y

你得到基础y代表:Σb i y i

答案 3 :(得分:0)

数字是标量还是分数?

转换分数部分需要额外的工作。

与BigInteger.toString()不同,它不容易作弊, BigDecimal.toString()不接受基数。