第八届蓝桥杯省赛 之 Excel

1491675432

题目描述
具体题目忘记了,大概的意思是说一个Excel表格的列数问题

A 表示 第1列

B 表示 第2列

C 表示 第3列

AB 表示 第28列

BA 表示 第53列

要求程序输入一个数字,需要输出当前列的表示

例如输入 26

输出 Z

再输入 2054

输出 BZZ

解题思路
观察可以发现规律,这是一个26进制的表示,

A = 1 * 26^0 = 1

AB = 1 * 26^1 + 2 * 26^0 = 28

BA = 2 * 26^1 + 1 * 26^0 = 53

BZZ = 2 * 26^2 + 26 * 26^1 + 26 * 26^0 = 2054

到这里问题已经解决了一半了,然后你第一时间是会联想到2进制的转换吧,没错就是他了

PS:当时在做这题花了差不多半个小时才调出来,今天考试没状态

代码实现
import java.util.Scanner;

public class A7 {

static void f(int n){
    if(n == 0) return ;
    if(n % 26 == 0){
        f(n / 26 - 1);
        System.out.print((char)('A' + 26 - 1));
    }else{
        f(n / 26);
        System.out.print((char)('A' + (n % 26) - 1));
    }
}

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    int n = scanner.nextInt();
    f(n);

    scanner.close();
}

}