JAVA - 最小基数

JAVA - the smallest base

大家好还有一个问题,想知道找到 "Smallest Possible Base" 的好方法是什么。所以工作了:

比如说,如果我有数字 10121,底数就是 3。但是我不知道如何在 Java 中实现这些,我能得到任何获得这个 [=21 的好方法的提示吗? =] 值。如果需要更多信息,我会 post 这个问题,如果我没有意义。谢谢

编辑: 哇,这么多反对票,我要求解释如何在 Java 中获得基础,因此我还没有解决方案。

x 基数的所有数字都小于 x

因此您的目标是获得最高位数,return +1 以获得尽可能少的基数。

在这种情况下

101211

最高位是2,因此最低位是3

char ch = '0';
for(int i = 0; i < str.length(); ++i)
 {
   char c = str.charAt(i);
   if(c > ch)
    ch = c;
 }
System.out.println(c - '0');

Java uses 这些字符作为以 2 到 36 为基数的数字的数字:

String digits = "0123456789abcdefghijklmnopqrstuvwxyz";

你的任务是逐个字符地检查 String value 个字符,并找到该小写字符在数字串中的位置。如果 digits 中没有该字符,则该值无法转换为数字。否则,该字符将位于 pos 位置。找出最高的 pos 和 return maxPos+1 作为你的答案。

例如,对于 val = "DeadBeef" 你应该得到字符 'f' 的位置,即 15。加一得到 16,这意味着 val 是一个有效的十六进制数.

简单地遍历单个数字。

找到最大的一个。

最小的基数是 1 + 最大的数字。

例如字符串 1232332234212 最大数字是 4 所以最小基数是 5

对于字符串 101000010001010001 最大数字是 1 所以最小基数是 2.

如果您还需要处理字母将字母转换为数字 A = 10,B = 11 等等。并应用相同的算法

可能会这样 - 请注意,它不会为您提供正确的 64 位数字结果。

public static int getSmallestPossibleBase(String value) {
    int max = 0;
    for (char c : value.toCharArray()) {
        int type = Character.getType(c);
        switch (type) {
            case Character.DECIMAL_DIGIT_NUMBER:
                // Decimal digit.
                max = Math.max(max, c - '0');
                break;
            case Character.UPPERCASE_LETTER:
            case Character.LOWERCASE_LETTER:
                // Works for base 16 and 32/36.
                max = Math.max(max, Character.toLowerCase(c) - 'a' + 10);
                break;
            default:
                throw new IllegalArgumentException("Your argument is invalid");
        }
    }
    return max + 1;
}