1855 - 序号互换

Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐标快速计算出来。单元格的行坐标是由数字编号的数字序号,而列坐标使用字母序号。观察字母序号,发现第1列到第26列的字母序号分别为A,B,…,Z,接着,第27列序号为AA,第28列为AB,依此类推。

若给Dr.Kong的机器人卡多一个数字序号(比如32),它能很快算出等价的字母序号(即AF),若给机器人一个字母序号(比如AA)),它也能很快算出等价的数字序号(27),你能不能与卡多比试比试,看谁能算得更快更准确。

题目输入

第一行: N 表示有多少组测试数据。 
接下来有N行, 每行或者是一个正整数,或者是一个仅由大写字母组成的字符串。
输入保证,所有数字序号和字母序号对应的数字序号均 ≤ 2*10^9

题目输出

对于每一行测试数据,输出一行。如果输入为一个正整数序号,则输出等价的字母序号;如果输入为字符串,则输出等价的数字序号。

输入/输出样例

题目输入

3
27
G
AA

题目输出

AA
7
27

C++解答

#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int n,i,j;
    char str[30];
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",str);
         int t=strlen(str);
        if(str[0]>='A'&&str[0]<='Z')
           {int m=0;
            long long sum=0;
           for(i=t;i>0;i--)
            {
               sum=sum+int(str[i-1]-'A'+1)*pow(26,m);
               m++;
            }

            printf("%lld\n",sum);
           }
           else
           {   int p=0;
               for(i=0;i<t;i++)
                 p=p*10+str[i]-'0';
             for(i=0;p>0;i++)
                 {str[i]=char((p-1)%26)+'A';
                   p=(p-1)/26;
                  }
                 for(j=i-1;j>=0;j--)
                 {
                  printf("%c",str[j]);
                 }
                     printf("\n");



           }

    }


}

时间限制 3 秒
内存限制 128 MB
讨论 统计
上一题 下一题