嘿,伙计们还有一个问题,只是想知道用什么方法来找到"最小可能基数"。所以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,等等。并应用相同的算法