如何将基数为10的长数转换为基数9而不转换为字符串?
答案 0 :(得分:8)
FWIW,所有值实际上都在你机器内的基数2(我打赌你已经知道了)。它只显示为基数10,因为字符串转换在基数10中创建字符串表示(例如,当您打印时),因为像parseLong
这样的方法假定输入字符串在基数10中,并且因为编译器期望所有文字都在基数中10当你真正编写代码时。换句话说,一切都是二进制的,计算机只是为了方便我们人类而将东西转换成基础10的东西。
接下来我们应该能够轻松地将输出基数更改为10以外的其他值,从而获得基数为9的相同值的字符串表示。在Java中,这是通过将可选的额外基本参数传递到Long.toString
方法。
long x=10;
System.out.println(Long.toString(x,9));
答案 1 :(得分:6)
Long base10 = 10;
Long.valueOf(base10.toString(), 9);
答案 2 :(得分:6)
“转换为基数9而不转换为字符串”实际上是什么意思?
Base-9,base-10,base-2(二进制),base-16(十六进制),只是表示数字的方法。值本身并不取决于您如何表示它。就编译器而言,int x = 256
与int x = 0xff
完全相同。
如果您不想“转换为字符串”(我读到这意味着您不关心值的表示),那么您想要做什么?
答案 3 :(得分:4)
如果不转换为字符串,则无法转换为基数。
写作时
Long a = 123;
你是隐含的假设,它是在10的基数。如果你想把它解释为基数9,那很好,但Java(或我所知的任何其他语言)突然不会看到它这样,8 + 1将返回9而不是10.有基本的2,8,16和10的原生支持,但对于任何其他基础,你必须将它作为一个字符串处理。 (然后,如果你确定你想要这个,请将其转换回很长时间)
答案 4 :(得分:2)
您必须应用通过应用重复模运算将数字从一个基数转换为另一个基数的算法。查看here以获取Java实现。我在这里报告该网站上的代码。变量M
必须包含要转换的数字,N
是新的基数。
警告:要使代码段正常工作,N>=1 && N<=10
必须为真。 N>10
的扩展名留给感兴趣的读者(您必须使用字母而不是数字)。
String Conversion(int M, int N) // return string, accept two integers
{
Stack stack = new Stack(); // create a stack
while (M >= N) // now the repetitive loop is clearly seen
{
stack.push(M mod N); // store a digit
M = M/N; // find new M
}
// now it's time to collect the digits together
String str = new String(""+M); // create a string with a single digit M
while (stack.NotEmpty())
str = str+stack.pop() // get from the stack next digit
return str;
}
答案 5 :(得分:0)
如果您可以做任何事情而不是转换为字符串,请执行以下操作:
public static long toBase(long num, int base) {
long result;
StringBuilder buffer = new StringBuilder();
buffer.append(Long.toString(num, base));
return Long.parseLong(buffer.toString());
}