题意
两种类型的格式
- RXCY X行Y列 X,Y都是数字
- YX Y列 X 行 Y是二十六进制,X是数字
互相转换
解析
本题比较恶习的一个地方就是A是代表1,Z代表26,没有0的存在。
唯一可以保证的时候,是我们进制转化时,取%mod,mod一定是26,我们在每一步进制转换的时候 每一位都减1处理,随后+的时候 +‘A’处理。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//一半英文 一半 数字 BC23 列行
//C列Y 行 RXCY
int f(string s){
int t=-1;
for(char x:s){
if(!isdigit(x)){
if(t==0){//不能从0变成1
return 1; // RXCY
}
t=1;
}
else{
t=0;
}
}
return 2;
}
int main() {
int n ;
cin>>n;
while(n--){
string s;
cin>>s;
int i=0,le=s.length();
if(f(s)==1){//RXCY
i++;
int r=0,c=0;
while(i<le && s[i]!='C'){
r=r*10+(s[i]-'0');
i++;
}
i++;
while(i<le){
c=c*10+(s[i]-'0');
i++;
}
// BC23 //列 行
stack<char>sk;
while(c){
sk.push(char((c-1)%26+'A'));
c=(c-1)/26;
}
while(!sk.empty()){
cout<<sk.top();
sk.pop();
}
cout<<r<<endl;
}
else{ //BC23类型 BC是列z
int c=0,r=0;
while(i<le && !isdigit(s[i])){
c=c*26+(s[i]-'A'+1);
i++;
}
while(i<le){
r=r*10+(s[i]-'0');
i++;
}
printf("R%dC%d\n",r,c);
}
}
}