JAVA——最小的基

  • 本文关键字:JAVA java radix
  • 更新时间 :
  • 英文 :


嘿,伙计们还有一个问题,只是想知道用什么方法来找到"最小可能基数"。所以working off:

假设我有数字10121,那么底数就是3。但我不知道如何在Java中实现这些,我能得到任何提示,一个好方法来获得这个返回值。如果需要更多的信息,我会张贴的问题,如果我没有意义。由于

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

Java使用这些字符作为基数2到36的数字:

String digits = "0123456789abcdefghijklmnopqrstuvwxyz";

您的任务是逐个字符遍历String value,并找到小写字符在数字字符串中的位置。如果digits中不存在该字符,则该值不能转换为数字。否则,字符将位于位置pos。找到最高的pos,并返回maxPos+1作为你的答案。

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

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

所以你的目标是获得最高的数字,并返回+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');

类似这样的操作就可以了——注意,对于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;
}

单位数循环。

找到最大的那个

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新