将两种形式表示行和列的方法互相转换,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);
}
}
}