尝试不使用数组或字符串将十进制转换为其他数字系统

问题描述 投票:0回答:1

我有一个作业分配,可以在2到36之间的任何数字系统中接受一个数字,并将其转换为另一个数字。例如,我想将3D07F8从base16转换为5ISQR的29。我的程序首先将数字转换为十进制,然后将其转换为目标基数。我的问题是,我只能使用char,int或booleans,而且我不知道如何打印结果。

while(decimalNumber > 0) {
   System.out.print(toChar(decimalNumber % targetNumberSystem));
   decimalNumber /= targetNumberSystem;
    }

toChar是我将int转换为char的方法。这会打印出RQSI5,我不知道如何在不使用数组或字符串的情况下将其反转。

java binary hex decimal
1个回答
0
投票

如果允许使用java.lang.Math,请尝试以下操作:

int exp, power, amount;
while(decimalNumber > 0)
{
  exp = (int)Math.floor(Math.log(decimalNumber)/Math.log(targetNumberSystem));
  power = (int)Math.pow(targetNumberSystem,exp);
  amount = decimalNumber / power;
  System.out.print(toChar(amount));
  decimalNumber -= power * amount;
}

虽然每次迭代需要更多的计算量,但此循环可确保首先打印出最大的数字。

简而言之,该循环找到存在的基数的最大幂(最左边的位置),然后找到该位置的数字(请注意行amount = decimalNumber / power中的整数除法),并打印出来。最后,通过减去总数(位置乘以数字)来完成,以确保下次运行新位置时将被打印。

© www.soinside.com 2019 - 2024. All rights reserved.