CodeForces - 1B

将两种形式表示行和列的方法互相转换,R23C55表示55列23行,则可以用BC23表示。A-Z表示1-26,27用AA表示,28用AB表示
Input
2
R23C55
BC23
Output
BC23
R23C55
主要就是26进制的转化,A从1开始!

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pill;
pill tmp;
map<pill,int> mp;
string s;
char s1[10111];
char p[]="ZABCDEFGHIJKLMNOPQRSTUVWXY";
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        tmp={1,1};
        cin>>s;
        int t,i,j,ans=0,sum=0,l=0;
        t=s.size();
        if(s[1]>='0'&&s[1]<='9'&&s[0]=='R')
        {
            for(i=1;i<t;i++)
            {
                if(s[i]=='C')
                    break;
                ans=ans*10+(s[i]-'0');
            }
            if(i==t)
            {
                printf("R%dC%d\n",ans,'R'-'A'+1);
                continue;
            }
            for(j=i+1;j<t;j++)
                sum=sum*10+s[j]-'0';
            while(sum)
            {
                if(sum%26)
                {
                    s1[l]=p[sum%26];
                    sum=sum/26;
                    l++;
                }
                else
                {
                    s1[l]='Z';
                    sum=sum/26;
                    sum--;
                    l++;
                }
            }
            for(i=l-1;i>=0;i--)
                printf("%c",s1[i]);
            printf("%d\n",ans);
        }
        else
        {
            for(i=0;i<t;i++)
            {
                if(s[i]<'0'||s[i]>'9')
                    continue;
                else
                    break;
            }
            for(j=i;j<t;j++)
            {
                ans=ans*10+s[j]-'0';
            }
            for(j=0;j<i;j++)
            {
                sum=sum*26+s[j]-'A'+1;
            }
            printf("R%dC%d\n",ans,sum);
        }
    }
}
上一篇:C语言刷题笔记37


下一篇:问题 E: 回文串判定