题目描述
用过 excel 的都知道excel的列编号是这样的:
a b c … z aa ab ac … az ba bb bc … yz za zb zc … zz aaa aab aac …
分别代表以下编号:
1 2 3 … 26 27 28 29 … 52 53 54 55 … 676 677 678 679 … 702 703 704 705 … 请写个函数,完成从一个正整数到这种字符串之间的转换。
输入描述
一个正整数
输出描述
excel样式的字符串
用例1
输入
1
输出
a
用例2
输入
26
输出
z
用例3
输入
27
输出
aa
思路:
类似于十进制转成26进制, 注意这里正整数从1开始,而26进制的余数是0~25,对应a~z。因此计算的时候要先把被除数-1。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
StringBuilder res = new StringBuilder();
to26(num,res);
System.out.println(res.reverse());
}
static int base=26;
//余数从0~25 表示 a~z , 题目给的正整数从1开始的,因此每次计算时要先-1
// (27-1)/26 =1...0 (1-1)/26 = 0 ...0
static void to26(int num,StringBuilder res){
num-=1;
int shang=num/base;
int yushu=num%base;
//a的ascii码为97
res.append( (char)('a'+yushu));
num=shang;
while (num!=0){
num-=1;
shang=num/base;
yushu=num%base;
res.append( (char)('a'+yushu));
num=shang;
}
}
}