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;
}
大家好还有一个问题,想知道找到 "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;
}