2012-08-15 5 views
6

Ich möchte eine ganze Zahl in alphabetische Äquivalent wie geordnete Liste in HTML konvertieren.Wie konvertiert man eine Basis 10 Nummer in alphabetisch wie sortierte Liste in HTML

<ol type="a"> 

Ich habe versucht, eine Basis 10 Nummer in eine Basis 26 mit a-z Ziffern zu konvertieren.
Aber das war nicht was ich wollte.

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

Meine zweite Idee:

Wenn ich ein neues führendes Symbol auf die Ziffern und konvertiere meine Nummer auf eine Basis 27 Nummer erstrecken, Ich habe das neue Symbol in jedem tragen über die ist falsch und ich kann diese herausfiltern.

Das ist sehr ineffizient und hässlich, aber ich habe keine Ideen mehr. Was ist der übliche Weg?

+0

Sie haben Ergebnisse gezeigt, die Sie nicht wollen - nur auf 26 versagt, soweit ich das sagen kann, - aber nicht das, was der Code ist ... –

+4

Da deine 0 hätte 'a' – perilbrain

+0

zugeordnet werden sollen, habe ich gerade mit liste-style getestet: low-alpha, und 26 sollte nur ** z **, nicht ** az ** . –

Antwort

9

Dies ist der grundlegende Algorithmus. Verwenden Sie einen String wenn Sie effizienter sein müssen:

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

Ein anderer Weg, dies zu tun, wäre zu konvertieren 26 zu stützen, und dann 97 in dem jedes Zeichen in der Zeichenfolge, die Sie erhalten.

1

Shop von A bis Z in Array-Index von 1 bis 26 ausgehend, sagen 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” 
} 
Verwandte Themen