char[] letters={
'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'
};
StringBuffer sb = new StringBuffer();
// int column = 26;
int column = 52;
int columnSize = column+1;
for(int letterLen=1;;letterLen++){
//-26-26*26-26*26*26-...
// Z ZZ ZZZ
//其实 A=0 AA=00 AAA=000 其他长度同理
//所以每一个都是从0开始的计算的
//所以要把前面的26倍数的数减去,然后进行进制计算
int surplus = columnSize - Pointer.pow(letters.length,letterLen);
if(surplus<=0){
//列的索引也是从0开始的,与转换后的进制同索引,A是0,B是1 重要,
//想想数字的进制转换
int columnIdx = columnSize-1;
//其实 A=0 AA=00 AAA=000 其他长度同理
//所以每一个都是从0开始的计算的
//26进制计算
do{
int remainder = columnIdx % letters.length;
sb.append(letters[remainder]);
columnIdx = columnIdx/letters.length;
}while(columnIdx > 0);
//字母长度不够,要用第一位填充,也就是A
int diffLen = letterLen - sb.length();
if(diffLen>0){
for(int i=0;i<diffLen;i++){
sb.append(letters[0]);
}
}
sb.reverse();
break;
}
columnSize=surplus;
}
Pointer.lg(sb);
BA