• codeforces---1B


    Description

      在一些知名的表格处理系统中(比如:excel表格),我们经常用大写的字母来表示列,例如A表示第1列,B表示第2列,第26列用Z来表示,同时第27列我们用AA来表示,第28列我们用AB来表示,第29列我们用AC来表示,AZ表示第52列,ZZ之后我们就需要用3个字母来表示列了。
      行的表示比较简单,我们一般用正整数来表示,比如1就表示第1行,5就表示第5行,行和列一起表示成为类似BC23的情况,这个表示在第23行,第55列。
      有时候,我们的系统也会用RXCY的格式来表示,X和Y是整数,分别表示行号和列号。例如:R23C55表示的位置和之前那个例子是一样的。
      你的任务是写一个程序,将这些位置在两种不同的表示方法之间转化。

    Input

    第一行是一个正整数n(1<=n<=10^5), 表示测试数据的数量。
    接下来n行,每行一串字符,表示一个位置,输入保证所有的位置都是正确的,没有一个位置的行号或者列号超过10^ 6。

    Output

    输出n行,每行是对应的位置的转化结果。

    Sample Input

    2
    R23C55
    BC23

    Sample Output

    BC23
    R23C55
     

    关键在:十进制转换二十六制

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <cmath>
    #include<vector>
    #include<queue>
    #include<algorithm>
    
    using namespace std;
    typedef long long LL;
    
    const int maxn=100005;
    const int INF=0x3f3f3f3f;
    
    char str[maxn];
    int len;
    
    void Tran(int n)
    {
        if(n>26)
            Tran((n-1)/26);
    
        printf("%c", (n-1)%26+'A');
    }
    void solve1()
    {
        int k;
    
        for(int i=0; i<len; i++)
        {
            if(str[i]=='C')
            {
                k=i;
                break;
            }
        }
    
        int Hang=0, Lie=0;
        for(int i=1; i<k; i++)
            Hang=Hang*10+(str[i]-'0');
    
        for(int i=k+1; i<len; i++)
            Lie=Lie*10+(str[i]-'0');
    
        Tran(Lie);
        printf("%d
    ", Hang);
    }
    
    void solve2()
    {
        int k;
        for(int i=0; i<len; i++)
        {
            if(isdigit(str[i]))
            {
                k=i;
                break;
            }
        }
    
        int Hang=0, Lie=0;
        for(int i=k; i<len; i++)
            Hang=Hang*10+(str[i]-'0');
    
        Lie=str[0]-'@';
        for(int i=1; i<k; i++)
            Lie=Lie*26+(str[i]-'@');
    
        printf("R%dC%d
    ", Hang, Lie);
    }
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {
            scanf("%s", str);
            len=strlen(str);
    
            int f=0;
         /**此处也要注意,刚开始在这也wa了
                必须要有这一步判断,有可能。。。
                R12——R12C18
                R12C18——R12**/
    if(str[0]=='R'&&isdigit(str[1])) { for(int i=2; i<len; i++) { if(str[i]=='C') { f=1; break; } } } if(f) solve1(); else solve2(); } return 0; }
  • 相关阅读:
    万字保姆级长文——Linkedin元数据管理平台Datahub离线安装指南
    【docker专栏1】docker解决的实际问题及应用场景
    【docker专栏3】docker基础概念容器、镜像以及引擎组成部分
    【docker专栏2】CentOS操作系统安装DockerCE
    WebGPU的计算着色器实现冒泡排序
    深度学习基础课:课程介绍
    深度学习基础课系列目录
    深度学习基础课: “判断性别”Demo需求分析和初步设计(下1)
    深度学习基础课:“判断性别”Demo需求分析和初步设计(上)
    WebGPU实现Ray Packet
  • 原文地址:https://www.cnblogs.com/w-y-1/p/5779447.html
Copyright © 2020-2023  润新知