2012-08-15 9 views
6

Chcę przekonwertować liczbę całkowitą na alfabetyczny odpowiednik, jak uporządkowaną listę w HTML.Jak przekonwertować liczbę podstawową 10 na alfabetyczną jak uporządkowaną listę w HTML

<ol type="a"> 

Próbowałem przekonwertować liczbę podstawową 10 na bazę 26 za pomocą cyfr a-z.
Ale nie tego chciałem.

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

My 2nd Idea:

Gdybym przedłużyć nowego lidera symbol cyfry i przekształcić swój numer do podstawy 27 numeru, mam nowy symbol w każdym nosić nad czym jest źle i mogę je odfiltrować.

To bardzo nieefektywne i brzydkie, ale nie mam więcej pomysłów. Jaki jest wspólny sposób?

+0

pan przedstawiono wyniki, które nie chcą - tylko upadających 26, o ile mogę powiedzieć - ale nie to, co kod jest ... –

+4

Ponieważ twoje 0 powinno być zmapowane "a" – perilbrain

+0

Właśnie przetestowałem używając stylu list: niższa alfa, a 26 powinno być po prostu ** z **, nie ** az ** . –

Odpowiedz

9

To jest podstawowy algorytm. Użyj StringBuffer, jeśli chcesz być bardziej efektywny:

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

Innym sposobem na to byłoby konwertować do podstawy 26, a następnie dodaj 97 do każdego znaku w łańcuchu dostać.

1

Store A do Z w indeksie tablicy począwszy od 1 do 26, powiedzmy 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” 
} 
Powiązane problemy