zoukankan      html  css  js  c++  java
  • [蓝桥杯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

    题解:就是将十进制转换为26进制,区别在于26进制数没有26这个数,但是这里有,所以26这个数要特殊处理:

     在26进制数中,26是用两位数表示,这里只用一位数‘Z’就可以表示,所以对n取模整除之后的数减一就行

    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<math.h>
    #include<string.h>
    #include<map>
    #include<stack>
    #define ll long long
    using namespace  std;
    int main()
    {
        ll n;
        while(cin>>n)
        {
            stack<char>p;
            while(n)
            {
                if(n%26==0)//因为26进制里面没有26这个数,但是地址里面有,所以要用这种形式存进去
                {
                    p.push('Z');
                    n=n/26;
                    n--;//存进去之后,数要减一(以26举例,26进制数26用两位数表示,但这里只用一位数就可以表示)
                }
                else
                {
                    p.push((char)('A'+n%26-1));
                    n=n/26;
                }
            }
            while(!p.empty())
            {
                cout<<p.top();
                p.pop();
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    display:inlineblock之用法
    MongoDB 分页
    MongoDB常用方法
    js获取上、下级html元素 js删除html元素方法
    设计模式(1)策略模式
    深入理解java虚拟机(1)
    dpvs 新建连接 转载
    当年使用dpdk做的业务
    内核full nat 简析
    DPDK性能优化技术 转载
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12339999.html
Copyright © 2011-2022 走看看