进制转换
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int p(int n)
{
if(n==0) return 1;
if(n==1) return 26;
int t=p(n/2);
if(n%2==0) return t*t;
else return t*t*26;
}
int main()
{
int n;
cin >> n;
while( n-- )
{
string s;
cin >> s;
string::size_type posr=s.find('R');
int posc=s.find_last_of('C');
if( s[0]=='R'&&isdigit(s[1])&&posc!=-1 )
{
int r=0,c=0;
string column="";
for(string::size_type i=1;i<posc;i++)
{
r=r*10+s[i]-'0';
}
for(string::size_type i=posc+1;i!=s.size();i++)
{
c=c*10+s[i]-'0';
}
int mod;
char buff[2];
while( c )
{
mod=c%26;
if(!mod) //此处注意 当c可以被26整除时 mod=0 此时字母是Z 并且c要自减1!!!
{
column='Z'+column;
c--;
}
else column=char(mod-1+'A')+column;
c/=26;
}
cout << column << r << endl;
}
else
{
int c=0,r=0,an=0;
for(string::size_type i=0;i!=s.size();i++)
{
if( isalpha(s[i]) )
{
an++;
}
else
{
break;
}
}
int t=an;
for(string::size_type i=0;i!=an;i++)
{
c+=(s[i]-'A'+1)*p(--t);
}
for(string::size_type i=an;i<s.size();i++)
{
r=r*10+(s[i]-'0');
}
cout << "R" << r << "C" << c << endl;
}
}
return 0;
}