2012-08-15 14 views
6

Voglio convertire un intero in equivalente alfabetico come l'elenco ordinato in HTML.Come convertire un numero base 10 in ordine alfabetico come l'elenco ordinato in HTML

<ol type="a"> 

Ho provato a convertire un numero di base 10 in una base 26 con cifre a-z.
Ma non è quello che volevo.

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); 
} 

La mia seconda idea:

Se Rivolgo un nuovo simbolo di primo piano per le cifre e convertire il mio numero a un numero di base 27, ho il nuovo simbolo in ogni trasportare oltre il quale è sbagliato e posso filtrarli.

Questo è molto inefficiente e brutto, ma non ho più idee. Qual è il modo comune?

+0

Hai mostrato i risultati che non si desidera - solo in mancanza, il 26, per quanto posso dire - ma non quello che è il codice ... –

+4

Perché il tuo 0 dovrebbe aver mappato 'a' – perilbrain

+0

Ho appena testato usando stile elenco: inferiore-alfa e 26 dovrebbe essere solo ** z **, non ** az ** . –

risposta

9

Questo è l'algoritmo di base. Utilizzare uno StringBuffer se avete bisogno di essere più efficiente:

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; 
    } 

Un altro modo per farlo sarebbe quello di convertire in base 26, e quindi aggiungere 97 a ciascun carattere della stringa che si ottiene.

1

Conservare dalla A alla Z in indice di array a partire da 1 a 26, dire 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” 
} 
Problemi correlati