Ich habe vor einiger Zeit eine Frage über einen Algorithmus gestellt, der 6 Zeichen base36 Strings aus Integer-Zahlen generiert. Es hat die Einschränkung, dass das erste und letzte Zeichen immer ein Buchstabe sein muss und dass die ganze Zeichenfolge groß geschrieben wird. HierModifizierte Base36 zu Base 10 Algorithmus
ist der Algorithmus:
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;
}
Ich versuche, ein Verfahren zu schaffen, die diese umkehrt. I.e. einen String gegeben wie A0000K es 10. Hier zurückkehren würde, ist, was ich bisher habe:
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;
}
Ich denke, die Frage um die if-Anweisung ist das Ergebnis für die Berechnung, aber ich bin mir nicht sicher, wie es zu berechnen. Ich basiere es von Standard-Algorithmen für die Umwandlung von anderen Basen zu Base 10.
Kann jemand helfen? Dank
Die Basis ist anders für verschiedene Ziffern, können Sie nicht pow verwenden. Die kleinste signifikante Zahl ist n * 1, die zweite ist n * 26, die dritte ist n * 26 * 36. –
Sorry, könnten Sie ein bisschen mehr Details liefern? Geht das nicht mit der if-Anweisung für die ersten und letzten Zeichen, die 10 von der Basis subtrahieren? – sam
Math.pow (Basis, n) Was ist Basis, wenn Sie 26 * 36 brauchen? –