Я недавно задал вопрос об алгоритме, который генерирует 6 символов base36 строк из целых чисел. Он имеет ограничение на то, что первый и последний символ всегда должны быть буквой и что вся строка является верхним регистром.Модифицированный алгоритм base36 на базовый 10
Вот алгоритм:
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;
}
Я думаю, что вопрос вокруг, если заявление для вычисления результата, но я не слишком уверен, как вычислить его. Я основываю его на стандартных алгоритмах для преобразования из других баз в базу 10.
Может ли кто-нибудь помочь? Благодаря
База отличается для разных цифр, вы не можете использовать pow. Наименьшая значащая цифра равна n * 1, вторая - n * 26, третья - n * 26 * 36. –
Извините, не могли бы вы предоставить более подробную информацию? Не содержит ли инструкция if для первого и последнего символов, которые вычитают 10 из базового дескриптора? – sam
Math.pow (база, n) что такое база, если вам нужно 26 * 36? –