与数字关联的最小基数
Minimum base associated with a number
给定一个输入,我正在尝试编写一个程序来找到可以与该数字相关联的最小基数。例如,与 385 相关联的最小基数是基数 9(因为它需要有一个支持数字 8 的基数,这是它的最高值数字)。类似地,与 B95 关联的最小基数是 base-12,因为它使用 0 -9 和 A 和 B.
这是我的代码
public static int findBase(String str){
int max = 0;
char c;
for (int i = 0; i <str.length() ; i++) {
c = str.toUpperCase().charAt(i);
if (Character.isDigit(c) && c > max) {
max = c;
}else if (Character.isLetter(c)) {
max = 10 + (c - 'A');
}
}
return max + 1;
}
问题是该函数正在返回随机 values.For 值 385 的示例 returns 56. 我做错了什么?
问题是当字符是数字时,您使用的是字符的 unicode 值。
而不是:
max = c;
...你应该使用:
max = c - '0';
还要注意 Character.isLetter
returns true
对于所有 unicode 字母,包括阿拉伯字母和来自其他字母表的字母,它们具有更高的 unicode 代码点值;同样 Character.isDigit
在您的情况下,您只能处理 ASCII 字符集中的拉丁字符,因此为了安全起见,最好专门检查一下。
而且您没有正确检查最大值(您将 unicode 代码点与最大值进行比较,而不是转换后的值)
int v = 0;
if (c >= '0' && c <= '9') {
v = c - '0';
} else if (c >= 'A' && c <= 'Z') {
v = 10 + (c - 'A');
}
if (v > max) {
max = v;
}
完整节目:
public static int findBase(String str) {
int max = 0;
str = str.toUpperCase();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int v = 0;
if (c >= '0' && c <= '9') {
v = c - '0';
} else if (c >= 'A' && c <= 'Z') {
v = 10 + (c - 'A');
}
if (v > max) {
max = v;
}
}
return max + 1;
}
给定一个输入,我正在尝试编写一个程序来找到可以与该数字相关联的最小基数。例如,与 385 相关联的最小基数是基数 9(因为它需要有一个支持数字 8 的基数,这是它的最高值数字)。类似地,与 B95 关联的最小基数是 base-12,因为它使用 0 -9 和 A 和 B.
这是我的代码
public static int findBase(String str){
int max = 0;
char c;
for (int i = 0; i <str.length() ; i++) {
c = str.toUpperCase().charAt(i);
if (Character.isDigit(c) && c > max) {
max = c;
}else if (Character.isLetter(c)) {
max = 10 + (c - 'A');
}
}
return max + 1;
}
问题是该函数正在返回随机 values.For 值 385 的示例 returns 56. 我做错了什么?
问题是当字符是数字时,您使用的是字符的 unicode 值。
而不是:
max = c;
...你应该使用:
max = c - '0';
还要注意 Character.isLetter
returns true
对于所有 unicode 字母,包括阿拉伯字母和来自其他字母表的字母,它们具有更高的 unicode 代码点值;同样 Character.isDigit
在您的情况下,您只能处理 ASCII 字符集中的拉丁字符,因此为了安全起见,最好专门检查一下。 而且您没有正确检查最大值(您将 unicode 代码点与最大值进行比较,而不是转换后的值)
int v = 0;
if (c >= '0' && c <= '9') {
v = c - '0';
} else if (c >= 'A' && c <= 'Z') {
v = 10 + (c - 'A');
}
if (v > max) {
max = v;
}
完整节目:
public static int findBase(String str) {
int max = 0;
str = str.toUpperCase();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int v = 0;
if (c >= '0' && c <= '9') {
v = c - '0';
} else if (c >= 'A' && c <= 'Z') {
v = 10 + (c - 'A');
}
if (v > max) {
max = v;
}
}
return max + 1;
}