- http://codeforces.com/contest/1/problem/B
-
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int myabs(int a,int b) { if(a>b) return a-b; else return b-a; } int f(char s[]) { int ans=0; for(int i=0; i<strlen(s); i++) { ans=(s[i]-'0')+ans*10; } return ans; } int altonum(char s[]) { int ans=0; for(int i=0; i<strlen(s); i++) { ans=ans*26+(int)(s[i]-'A'+1); } return ans; } int main() { char ans1[50],ans2[50]; char str[100]; int ci,ri; int n,ans; int k,g; int num[100]; cin>>n; while(n--) { cin>>str; int len=strlen(str); ci=-1; ri=-1; for(int i=0; i<len; i++) { if(str[i]=='R') ri=i; if(str[i]=='C') ci=i; } if(myabs(ci,ri)>1&&str[ci-1]-'0'>=0&&str[ci-1]-'0'<=9&&ci!=-1&&ri!=-1)///R C 之间必须是数字, { //cout<<1<<endl; k=0,g=0; int j; for(int i=0; i<len; i++) { if(str[i]=='R') { for(j=i+1; j<len; j++) { if(str[j]=='C') { // cout<<"j"<<j<<endl; ans2[k]='\0'; break; } ans2[k++]=str[j]; } for(j=j+1; j<len; j++) { ans1[g++]=str[j]; } ans1[g]='\0'; break; } } ans=f(ans1); k=0; while(ans) { num[k++]=ans%26; int t=ans; ans=ans/26; if(t%26==0) ans--; } for(int i=k-1; i>=0; i--) { if(num[i]==0) cout<<"Z"; else cout<<char(num[i]-1+'A'); } cout<<ans2<<endl; } else { k=0,g=0; for(int i=0; i<len; i++) { if(isalpha(str[i])) ans2[k++]=str[i]; else if(str[i]-'0'<=9&&str[i]-'0'>=0) ans1[g++]=str[i]; } ans1[g]='\0'; ans2[k]='\0'; cout<<"R"<<ans1<<"C"; ans=altonum(ans2); cout<<ans<<endl; } } return 0; }