2012-08-15 19 views
6

Quiero convertir un número entero en equivalente alfabético como lista ordenada en HTML.Cómo convertir un número de base 10 a alfabético como lista ordenada en HTML

<ol type="a"> 

He intentado convertir un número de base 10 en una base 26 con los dígitos a-z.
Pero eso no es lo que quería.

IN  WANT  GET  
----------------------- 
1 => a  <= a 
2 => b  <= b 
3 => c  <= c 
4 => d  <= d 
5 => e  <= e 
6 => f  <= f 
7 => g  <= g 
8 => h  <= h 
9 => i  <= i 
10 => j  <= j 
11 => k  <= k 
12 => l  <= l 
13 => m  <= m 
14 => n  <= n 
15 => o  <= o 
16 => p  <= p 
17 => q  <= q 
18 => r  <= r 
19 => s  <= s 
20 => t  <= t 
21 => u  <= u 
22 => v  <= v 
23 => w  <= w 
24 => x  <= x 
25 => y  <= y 
26 => z  <= az 
27 => aa  <= aa 
28 => ab  <= ab 
29 => ac  <= ac 

private final static char[] digits = { 
'0' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 
'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 
'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 
's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' 
}; 

private static String numberToAlphaNumeric(long i, int radix) { 

    char[] buf = new char[65]; 
    int charPos = 64; 
    boolean negative = (i < 0); 
    if (!negative) { 
     i = -i; 
    } 
    while (i <= -radix) { 
     buf[charPos--] = digits[(int)(-(i % radix))]; 
     i = i/radix; 
    } 
    buf[charPos] = digits[(int)(-i)]; 
    if (negative) { 
     buf[--charPos] = '-'; 
    } 
    return new String(buf, charPos, (65 - charPos)); 
} 

public static String numberToAlphaNumeric(long number) { 
    ArrayList<String> list = new ArrayList<String>(); 
    for(int j = 0; list.size() != number; j++) { 
     String alpha = numberToAlphaNumeric(j, digits.length); 
     if(!alpha.contains("0")) { 
      list.add(alpha); 
     } 
    } 
    return list.get(list.size()-1); 
} 

Mi segunda idea:

Si extiendo un nuevo símbolo que conducen a los dígitos y convertir mi número a un número de base 27, que tienen el nuevo símbolo en cada llevar sobre lo que está mal y puedo filtrarlos.

Esto es muy ineficiente y feo, pero no tengo más ideas. ¿Cuál es la forma común?

+0

Has demostrado resultados que no queremos - única en su defecto, el 26, por lo que yo puedo decir - pero no lo que es el código ... –

+4

Debido a que su 0 debería haber mapeado 'a' – perilbrain

+0

Acabo de probar usando list-style: lower-alpha, y 26 debería ser solo ** z **, no ** az ** . –

Respuesta

9

Este es el algoritmo básico. Use un StringBuffer si necesita ser más eficiente:

public static String getAlpha(int num) { 

    String result = ""; 
    while (num > 0) { 
     num--; // 1 => a, not 0 => a 
     int remainder = num % 26; 
     char digit = (char) (remainder + 97); 
     result = digit + result; 
     num = (num - remainder)/26; 
    } 

    return result; 
    } 

Otra manera de hacer esto sería convertir a basar 26, y luego añadir 97 a cada carácter de la cadena que se obtiene.

1

tienda de A a Z en el índice de matriz a partir de 1 a 26, por ejemplo alphArr []

i = Input 

If(i<26){ 
    Print alphArr[i] 
    }else{ 
    //Consider i=27 
    count = i/26 (here, count=1) 
    alphabet = i%26 (here alphabet =1) 
    print alphArr[count]+””+alphArr[alphabet] // Which will be “AA” 
} 
Cuestiones relacionadas