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