我有一个作业分配,可以在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.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
中的整数除法),并打印出来。最后,通过减去总数(位置乘以数字)来完成,以确保下次运行新位置时将被打印。