如何将一个基数10数字转换为像HTML中的有序列表这样的字母表

问题描述:

我希望将一个整数转换为像HTML中的有序列表一样的字母等效数据。如何将一个基数10数字转换为像HTML中的有序列表这样的字母表

<ol type="a"> 

我试图基座10数字转换为基部26以a-z数字。
但这不是我想要的。

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

我的第二个想法:

如果我一个新的主导符号延伸到数字和我的电话号码变换成基27号, 我有新的符号在每一个开展这是错误的,我可以过滤掉这些。

这是非常低效和丑陋的,但我没有更多的想法。常用的方法是什么?

+0

你已经证明,你不想要的结果 - 只有失败月26日,据我可以告诉 - 但不是代码是什么... – 2012-08-15 13:11:19

+4

因为你的0应该映射'a' – perilbrain 2012-08-15 13:15:32

+0

我刚刚测试使用列表样式:低α和26应该只是** z **,而不是** az ** 。 – 2012-08-15 13:28:01

这是基本算法。如果你需要更高效地使用一个StringBuffer:

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

另一种方式做,这将转化为基座26,然后添加97你得到的字符串中的每个字符。

商店A到Z的数组索引开始从1到26,说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” 
}