关键在:十进制转换二十六制
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include<vector> #include<queue> #include<algorithm> using namespace std; typedef long long LL; const int maxn=100005; const int INF=0x3f3f3f3f; char str[maxn]; int len; void Tran(int n) { if(n>26) Tran((n-1)/26); printf("%c", (n-1)%26+'A'); } void solve1() { int k; for(int i=0; i<len; i++) { if(str[i]=='C') { k=i; break; } } int Hang=0, Lie=0; for(int i=1; i<k; i++) Hang=Hang*10+(str[i]-'0'); for(int i=k+1; i<len; i++) Lie=Lie*10+(str[i]-'0'); Tran(Lie); printf("%d ", Hang); } void solve2() { int k; for(int i=0; i<len; i++) { if(isdigit(str[i])) { k=i; break; } } int Hang=0, Lie=0; for(int i=k; i<len; i++) Hang=Hang*10+(str[i]-'0'); Lie=str[0]-'@'; for(int i=1; i<k; i++) Lie=Lie*26+(str[i]-'@'); printf("R%dC%d ", Hang, Lie); } int main() { int T; scanf("%d", &T); while(T--) { scanf("%s", str); len=strlen(str); int f=0;
/**此处也要注意,刚开始在这也wa了
必须要有这一步判断,有可能。。。
R12——R12C18
R12C18——R12**/ if(str[0]=='R'&&isdigit(str[1])) { for(int i=2; i<len; i++) { if(str[i]=='C') { f=1; break; } } } if(f) solve1(); else solve2(); } return 0; }