这题就是进制转换 (这里是26进制)
#include "bits/stdc++.h"
using namespace std;
int t;
string s;
map<char,int>mp;
// 判断是转换的是哪一种类型
bool ss(string sl){
int len = sl.size();
int g=0;
for(int i=0;i<len;i++){
if(g==0 && s[i]>='A'&&s[i]<='Z'){
g++;
}else if(g == 1 && s[i]>='0' && s[i]<='9'){
g++;
}else if(g==2 && s[i]>='A'&&s[i]<='Z'){
g++;
}else if(g==3 && s[i]>='0'&&s[i]<='9'){
g++;
}
}
if(g == 2) return false;
else return true;
}
// 预处理一下字母相对应的值,这里也可以用char数组 或者字符串写 写法多种
void init(){
mp['A']=1;mp['B']=2;mp['C']=3;mp['D']=4;mp['E']=5;mp['F']=6;
mp['G']=7;mp['H']=8;mp['I']=9;mp['J']=10;mp['K']=11;mp['L']=12;
mp['M']=13;mp['N']=14;mp['O']=15;mp['P']=16;mp['Q']=17;mp['R']=18;
mp['S']=19;mp['T']=20;mp['U']=21;mp['V']=22;mp['W']=23;mp['X']=24;
mp['Y']=25;mp['Z']=26;
}
int main()
{
cin >> t;
init();
while (t--)
{
cin >> s;
if(ss(s)){
int f=0;
int a1=0,a2=0;
// 取出2个数字
for(int i=0 ;i < s.size() ;i++){
if(s[i] == 'C') f=1;
if(f==0 && s[i]>='0'&&s[i]<='9'){
a1= a1*10 + (s[i]-'0');
}else if(f==1 && s[i]>='0'&&s[i]<='9'){
a2= a2*10 + (s[i]-'0');
}
}
string c="";
while (a2)
{
// 因为是26倍数 所以要减去26 因为进制转换第一位不都是 每位的0次方 所以刚开始 要判断下
if(a2%26 == 0){
a2-=26;
c+='Z';
}else{
int k = a2%26;
for(auto i:mp){
if(i.second==k){
c+=i.first;
break;
}
}
}
a2/=26;
}
// 逆转一下 因为我是倒着加的
reverse(c.begin(),c.end());
cout << c << a1 << endl;
}else{
string a="",b="";
for(int i=0;i<s.size();i++){
if(s[i]>='A'&&s[i]<='Z') a+=s[i];
else b+=s[i];
}
int ans = a.size();
int sum = 0,cnt=1;
for(int i=ans-1;i>=0;i--){
sum+= mp[a[i]]*cnt;
cnt*=26;
}
cout << "R" << b <<"C"<<sum<<endl;
}
}
return 0;
}