[蓝桥杯][2017年第八届真题]Excel地址

[蓝桥杯][2017年第八届真题]Excel地址

时间限制: 1Sec 内存限制: 128MB 提交: 522 解决: 192
Excel单元格的地址表示很有趣,它使用字母来表示列号。

比如,

A表示第1列,

B表示第2列,

Z表示第26列,

AA表示第27列,

AB表示第28列,

BA表示第53列,

当然Excel的最大列号是有限度的,所以转换起来不难。

如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?

本题目即是要求对输入的数字, 输出其对应的Excel地址表示方式。
输入
输入数字
输出
对应的excel地址

样例输入
26

样例输出
Z

思路:

一个位置一个位置的求值

  1. 求出当前的余数,并减去
  2. 再求下一位,直到n<=1

两种情况:
1. 当前余数!=0:表示可以用公式:‘A’+m-1,来表示他的asci码值
2. 当前余数==0:特殊情况,当n=26时,m=0,代表当前的位置为’Z’

[蓝桥杯][2017年第八届真题]Excel地址_第1张图片

public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  int n=sc.nextInt();
  String ans="";//存储答案
  while(n>=1) {
   int m=n%26;//表示当前可以用一个字母代表的列
   char c;//代表当前的答案
   if(m!=0) {//
    n=(n-m)/26;//减去当前的余数
    c=(char) ('A'+m-1);
   }else {//例如:当n=26时m=0->'Z',当前这个位一定为'Z'
    n=(n-26)/26;//减去26,防止当出现ZZ的情况出错
    c='Z';
   }
   
//   System.out.println((int)c);
   ans=c+ans;
  }
  System.out.println(ans);

 }

你可能感兴趣的:([蓝桥杯][2017年第八届真题]Excel地址)