2012-08-15 56 views
6

Tôi muốn chuyển đổi số nguyên thành chữ cái tương đương như danh sách thứ tự trong HTML.Cách chuyển đổi số cơ sở 10 thành chữ cái như danh sách thứ tự trong HTML

<ol type="a"> 

Tôi đã cố chuyển đổi số cơ sở 10 thành số 26 bằng số z.
Nhưng đó không phải là điều tôi muốn.

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

Idea thứ 2 của tôi:

Nếu tôi mở rộng một biểu tượng hàng đầu mới để các chữ số và chuyển đổi số của tôi cho một số cơ sở 27, Tôi có Symbol mới trong mỗi thực hiện quá sai và tôi có thể lọc chúng.

Điều này rất không hiệu quả và xấu xí, nhưng tôi không có ý tưởng nào khác. Cách phổ biến là gì?

+0

Bạn đã thể hiện kết quả mà bạn không muốn - chỉ thất bại vào ngày 26, như xa như tôi có thể nói - nhưng không phải mã là gì ... –

+4

Vì 0 của bạn nên có ánh xạ 'a' – perilbrain

+0

Tôi vừa thử nghiệm bằng cách sử dụng kiểu danh sách: dưới-alpha và 26 phải là ** z **, chứ không phải ** az ** . –

Trả lời

9

Đây là thuật toán cơ bản. Sử dụng StringBuffer nếu bạn cần hiệu quả hơn:

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

Cách khác để thực hiện việc này là chuyển đổi thành cơ sở 26 và sau đó thêm 97 vào từng ký tự trong chuỗi bạn nhận được.

1

cửa hàng A đến Z trong chỉ số mảng bắt đầu từ 1 đến 26, nói 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” 
} 
Các vấn đề liên quan