Java 以不'的较高基数计算;我没有随信附上
各位好,今天我提出一个奇怪的问题 大家都知道,有不同的计算方法(根据基数) 对于基数2(也称为二进制),可以按如下方式计算 0000=(2^3 x 0)+(2^2 x 0)+(2^1 x 0)+(2^0 x 0)=0 0001=(2^3 x 0)+(2^2 x 0)+(2^1 x 0)+(2^0 x 1)=1 0010=(2^3 x 0)+(2^2 x 0)+(2^1 x 1)+(2^0 x 0)=2 0011=(2^3 x 0)+(2^2 x 0)+(2^1 x 1)+(2^0 x 1)=3 ……等等Java 以不'的较高基数计算;我没有随信附上,java,count,numbers,base,Java,Count,Numbers,Base,各位好,今天我提出一个奇怪的问题 大家都知道,有不同的计算方法(根据基数) 对于基数2(也称为二进制),可以按如下方式计算 0000=(2^3 x 0)+(2^2 x 0)+(2^1 x 0)+(2^0 x 0)=0 0001=(2^3 x 0)+(2^2 x 0)+(2^1 x 0)+(2^0 x 1)=1 0010=(2^3 x 0)+(2^2 x 0)+(2^1 x 1)+(2^0 x 0)=2 0011=(2^3 x 0)+(2^2 x 0)+(2^1 x 1)+(2^0 x 1)=3
当我们达到大于10的基数时,例如16(也称为十六进制),我们使用字母来表示值: 例如: 200碱基16=C8-->(如果你不相信我;)
然而,我们如何计算高于字母允许的基数?(碱基37+) 我编写了一个简单的java程序来说明我的观点:
public class Testing {
public static void main(String[] args) {
for (int base = 1;base<=50;base++){
System.out.println("===========================Base " + base + "===============================");
for (int value=1; value<=50; value++){
System.out.println(value + " base " + base + " is equal to: " + Integer.toString(value, base));
}
}
}
}
如你所见,基数37+不起作用
有没有办法解决这个问题?谢谢大家!
字符。最大基数等于36(10位数字和26个字母)
如果您想对基数使用更高的值,则必须编写自己的方法。这不应该太难。我建议修改Integer.toString(int,int)
的源代码。此方法的代码使用此数组:
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
字符。最大基数
等于36
(10位数字和26个字母)
如果您想对基数使用更高的值,则必须编写自己的方法。这不应该太难。我建议修改Integer.toString(int,int)
的源代码。此方法的代码使用此数组:
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
试试这个
public static String DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz@!#$%&;:";
public static String toString(int i, int base) {
StringBuilder sb = new StringBuilder();
for (; i > 0; i /= base)
sb.append(DIGITS.charAt(i % base));
if (sb.length() == 0)
sb.append(0);
return sb.reverse().toString();
}
试试这个
public static String DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz@!#$%&;:";
public static String toString(int i, int base) {
StringBuilder sb = new StringBuilder();
for (; i > 0; i /= base)
sb.append(DIGITS.charAt(i % base));
if (sb.length() == 0)
sb.append(0);
return sb.reverse().toString();
}
好。您想使用什么系统?你想用希腊字母吗?外星符号?你只能修理坏了的东西。但这里什么也没坏。问题很简单,你想要一个有足够“符号”的系统,这样你就可以表达37+个不同的值,而不需要组合“符号”。换句话说:您正在谈论编码信息。有很多方法可以做到这一点。例如,您可以区分小写和大写(因此a表示a的其他含义)。如前所述:您可以定义您想要的任何内容。ASCII字符对字符没有限制。使用Unicode编码,您可以继续使用更大的基值。如果这仍然不够,您将需要发明一种不同的方法来显示数字,可能每个数字都写为\u digit
,其中\u
是一个单独的字符,digit是一个多字符值。最后,is只是B-adic(sp?)项(B-adischer-Bruch)井的数学上正确的缩写形式。您想使用什么系统?你想用希腊字母吗?外星符号?你只能修理坏了的东西。但这里什么也没坏。问题很简单,你想要一个有足够“符号”的系统,这样你就可以表达37+个不同的值,而不需要组合“符号”。换句话说:您正在谈论编码信息。有很多方法可以做到这一点。例如,您可以区分小写和大写(因此a表示a的其他含义)。如前所述:您可以定义您想要的任何内容。ASCII字符对字符没有限制。使用Unicode编码,您可以继续使用更大的基值。如果这仍然不够,您将需要发明一种不同的方法来显示数字,可能每个数字都写为\u digit
,其中\u
是一个单独的字符,digit是一个多字符值。最后,is只是B-adic(sp?)项(B-adischer-Bruch)数学上正确的缩写形式