从Base-10转换为Base-9的Java代码

从Base-10转换为Base-9的Java代码,java,number-systems,Java,Number Systems,如何在不转换为字符串的情况下将以10为基数的长数字转换为以9为基数的数字?如果不转换为字符串,则无法转换为以9为基数的数字 Long base10 = 10; Long.valueOf(base10.toString(), 9); 当你写作时 Long a = 123; 你在做一个隐含的假设,它在10进制。如果你想把它解释成一个以9为基数的数字,这很好,但是Java(或我所知道的任何其他语言)不可能突然这么认为,所以8+1将返回9而不是10。对base 2、8、16和10有本机支持,但对于任

如何在不转换为字符串的情况下将以10为基数的长数字转换为以9为基数的数字?

如果不转换为字符串,则无法转换为以9为基数的数字

Long base10 = 10;
Long.valueOf(base10.toString(), 9);
当你写作时

Long a = 123;
你在做一个隐含的假设,它在10进制。如果你想把它解释成一个以9为基数的数字,这很好,但是Java(或我所知道的任何其他语言)不可能突然这么认为,所以8+1将返回9而不是10。对base 2、8、16和10有本机支持,但对于任何其他base,都必须将其视为字符串。(然后,如果您确定需要,请将其转换回long)

什么是“转换为base 9而不转换为string”

Base-9、Base-10、Base-2(二进制)、Base-16(十六进制)只是表示数字的方法。值本身并不取决于您如何表示它<就编译器而言,code>intx=256与
intx=0xff
完全相同


如果您不想“转换为字符串”(我认为这意味着您不关心值的表示),那么您到底想做什么?

您必须应用算法,通过应用重复的模运算将数字从一个基数转换为另一个基数。寻找Java实现。我在这里报告在那个网站上找到的代码。变量
M
必须包含要转换的数字,
N
是新的基数。 警告:为了使代码段正常工作,
N>=1&&N10
留给感兴趣的读者(您必须使用字母而不是数字)


FWIW,所有的值实际上都在你的机器内的基数2中(我打赌你已经知道了)。它只显示为base 10,因为字符串转换在base 10中创建字符串表示(例如,当您打印时),因为
parseLong
等方法假定输入字符串在base 10中,并且编译器在您实际编写代码时希望所有文本都在base 10中。换句话说,所有东西都是二进制的,为了方便我们人类,计算机只把东西转换成十进制和十进制

因此,我们应该能够很容易地将输出基数更改为10以外的值,从而获得基数9中相同值的字符串表示。在Java中,这是通过向
Long.toString
方法传递一个可选的额外基参数来实现的

long x=10;
System.out.println(Long.toString(x,9));

如果您确实可以执行除转换为字符串以外的任何操作,请执行以下操作:

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());
}

实际上,我需要它,而不必将其转换为字符串。不,这不是家庭作业。我实际上需要修改函数,用不同的数字符号返回基数9。我不太理解问题的背景。你能在你的问题中举个例子吗?除非是家庭作业,否则通过字符串是最聪明的路线,除非你有严格的性能要求。否则,您只需重新实现
valueOf()
使用的算法(本质上,使用模数和整数除法从基数中挑出以9为基数的数字)。不,您这样做是错误的。您正在将字符串“10”解释为基数为9的表示形式。我相信问题的重点是从10“9”到9“10”,但你的答案正好相反。我认为您需要
Long.toString(9,9)
,它返回
“10”
。从技术上讲,您可以不使用
string
而使用整数运算,但很难理解为什么要这样做。您可以选择两种方式:从(计算1*9^2+2*9+3)转换或转换为(生成小数点148,用于解释为基数为9的等效值)。不过,我真的不明白这有什么意义!很公平,如果您手工操作:)M和N不是最清晰的变量名!我假设M是要转换的数字,N是新的基数。不过很有趣。我只是复制了我在链接网站上找到的程序。事实上,M是要转换的数字,N是新的基数。我不会使用来自使用明显代码文档的站点的源代码。数字没有基数。数字的字符串表示形式有一个基数。当你说你有一个以10为基数的数字时,实际上你的意思是你有一个以10为基数的数字字符串表示。这是一个矛盾的问题。
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());
}