背景:要求一次输入A-Z,然后是AA-AZ这样一次有序递增的输出时,首先联想到10进制与26进制之间的转换,其次在考虑26进制转换成相应的字母。为了简单,省去部分代码的复杂度,在10进制转换26进制过程中,拿到每次26进制相应位数的系数,这样子,就可以直接就可以拼接出最后的要求结果。如27 = 1* 26 + 1,获取[1,1],可直接拼接成AB这样的结果。
具体代码实现:
@Test
public void testConversion(){
int[] coeffients = getCoefficient(26, 26);
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String result = "";
for(int len = coeffients.length, i=len-1;i >=0;i--){
int index = coeffients[i];
index = len != 1&& i==len-1 ?index-1:index;// 首位减一
result += alphabet.charAt(index);
}
System.out.print(result);// AA
}
/**
*
* @param num 要转换的十进制数
* @param system 进制数
* @return
*/
public int[] getCoefficient(int num,int system){
int len = 1;
if(num >= system){
String logarithm = Math.log(num)/Math.log(system) + "";// 对数
len = Integer.parseInt(logarithm.split("\\.")[0]+"") + 1;
}
int[] arr = new int[len];
String decomposition = "" ;
for(int i = len -1;i>=0;i--){
int divisor = (int) Math.pow(system,i);
int quotient = num / divisor; // 商数
int remainder = num % divisor;// 余数
decomposition += quotient + "*" +(system + "^" +i) + "+";
arr[i] = quotient;
num = remainder;
}
// decomposition : 79 = 3*5^2+0*5^1+4*5^0
System.out.println(decomposition.substring(0,decomposition.length()-1));
return arr;
}