【发布时间】:2017-02-21 21:36:30
【问题描述】:
我前段时间发布了一个关于从整数生成 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;
}
我正在尝试创建一种方法来扭转这种情况。 IE。给定一个字符串,例如 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。
有人可以帮忙吗? 谢谢
【问题讨论】:
-
不同位数的base不同,不能使用pow。最不重要的数字是 n * 1,第二个是 n * 26,第三个是 n * 26 * 36。
-
对不起,你能提供更多细节吗?从基数中减去 10 的第一个和最后一个字符的 if 语句不处理这个吗?
-
Math.pow(base, n) 如果你需要 26 * 36,base 是什么?