Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以不'的较高基数计算;我没有随信附上_Java_Count_Numbers_Base - Fatal编程技术网

Java 以不'的较高基数计算;我没有随信附上

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

各位好,今天我提出一个奇怪的问题

大家都知道,有不同的计算方法(根据基数)

对于基数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)数学上正确的缩写形式