嘿伙计们有另一个问题,只是想知道用什么方法来找到最小的可能基数"。努力工作:
如果我的数字是10121,那么基数就是3.但我不知道如何在Java中实现这些,我是否可以获得一个获得此返回值的好方法的任何提示。如果需要更多信息,我会发布问题,如果我没有意义的话。感谢
编辑: 哇,这么多的downvotes,我要求解释如何在Java中获得基础,这就是为什么我还没有解决方案。
答案 0 :(得分:2)
Java uses这些字符作为基数2到36中数字的数字:
String digits = "0123456789abcdefghijklmnopqrstuvwxyz";
您的任务是逐个字符地查看String value
,并在数字字符串中找到该小写字符的位置。如果digits
中没有该字符,则该值无法转换为数字。否则,角色将位于pos
位置。找到最高pos
,并返回maxPos+1
作为答案。
例如,对于val = "DeadBeef"
,您应该获得字符'f'
的位置,即15.添加一个给出16,意味着val
是有效的十六进制数。 / p>
答案 1 :(得分:1)
base-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');
答案 2 :(得分:0)
只需循环显示单个数字。
找到最大的一个。
最小的基数是1 +最大数字。
例如,对于字符串1232332234212
,最大数字 4 ,因此最小数字 5
对于字符串101000010001010001
,最大数字 1 ,因此最小数字 2 。
如果您还需要处理字母,请将字母转换为数字A = 10,B = 11,依此类推。并应用相同的算法
答案 3 :(得分: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;
}