前段时间我发布了一个关于从整数生成 6 个字符的 base36 字符串的算法的问题。它的限制是第一个和最后一个字符必须始终是字母,并且整个字符串都是大写的。
这是算法:
String getId(int id)
{
String s = "";
for(int i = 0; i < 6; i++)
{
int digit;
if((i == 0) || (i == 5))
{
digit = (id % 26) + 10;
id /= 26;
}
else
{
digit = id % 36;
id /= 36;
}
// add the digit to the string:
if(digit < 10)
s = (char)('0' + digit) + s;
else
s = (char)('A' + (digit - 10)) + s;
}
return s;
}
我正在尝试创建一种方法来扭转这种情况。即给定一个字符串,例如 A0000K,它会返回 10。这是我目前所拥有的:
static int getNumber(String id) {
int base = 36;
int result = 0;
int n = id.length();
for (int i = 0; i < id.length(); i++)
{
n-=1;
int digit = Character.digit(id.charAt(i), base);
if(i == 0 || i == 5) {
result += digit * (Math.pow(base-10, n));
}
else {
result += digit * (Math.pow(base, n));
}
}
return result;
}
我认为问题在于用于计算结果的 if 语句,但我不太确定如何计算它。我基于从其他基数转换为基数 10 的标准算法。
任何人都可以帮忙吗?谢谢