• NOJ1333: [蓝桥杯2017初赛]Excel地址


    题目描述

    Excel单元格的地址表示很有趣,它使用字母来表示列号。 
    比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,.... 
    当然Excel的最大列号是有限度的,所以转换起来不难。 
    如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢? 
    本题目既是要求对输入的数字, 输出其对应的Excel地址表示方式。 

    输入

    输入存在多组测试数据,对于每组测试数据输入一行包含一个整数 
    输入的整数范围[1,2147483647] 

    输出

    对于每组测试数据:输出一行表示答案 

    样例输入 Copy

    26
    2054

    样例输出 Copy

    Z
    BZZ

    我怎么变菜了,这种题居然做不出,还要搜题解。看来还是要做点真题,不然比赛要翻车啊。记录一下。

    思路:很像进制又有所不同,没有0,取值是1-26,十进制取值是0-9,在n%26==0时,末尾补Z,然后n减1以抵消最后的Z

    import java.util.*;
    
    public class Main{
        
        public static void main(String []args){    
            Scanner scan=new Scanner(System.in);
            char[]s=new char[100];
            int cnt=0;
            while(scan.hasNext()) {
                cnt=0;
                int n=scan.nextInt();
                while(n!=0) {
                    if(n%26==0) {//末位必然是Z
                        s[cnt]='Z';
                        cnt++;
                        n=n/26;
                        n--;//例如n=52,n=52/26=2,然而是AZ,减去末位的一份26
                    }else {
                        int r=n%26;
                        s[cnt]=(char)('A'-1+r);
                        cnt++;
                        n=n/26;//例如28,AB,r=28%26=2,n=28/26=1
                    }
                }
                for(int i=cnt-1;i>=0;i--)
                    System.out.print(s[i]);
                System.out.println();
            }
        }
    }

    天上不会掉馅饼,努力奋斗才能梦想成真。

  • 相关阅读:
    cocos2d-x项目101次相遇:在HelloWorld上--建立新场景
    MySQL优化之——日志
    Zoj2421 广搜
    GG链路过多port不足导致的报错OGG-01223
    java的InputStream和OutputStream的理解【转】
    JAVA编程规则
    JAVA的String 类
    JAVA的StringBuffer类
    android自带的处理Bitmap out Memory 的处理,我仅仅是改变了些写法成为自己用的东西
    NS3网络仿真(2):first.py
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/12336089.html
Copyright © 2020-2023  润新知