Description
在一些知名的表格处理系统中(比如:excel表格),我们经常用大写的字母来表示列,例如A表示第1列,B表示第2列,第26列用Z来表示,同时第27列我们用AA来表示,第28列我们用AB来表示,第29列我们用AC来表示,AZ表示第52列,ZZ之后我们就需要用3个字母来表示列了。
行的表示比较简单,我们一般用正整数来表示,比如1就表示第1行,5就表示第5行,行和列一起表示成为类似BC23的情况,这个表示在第23行,第55列。
有时候,我们的系统也会用RXCY的格式来表示,X和Y是整数,分别表示行号和列号。例如:R23C55表示的位置和之前那个例子是一样的。
你的任务是写一个程序,将这些位置在两种不同的表示方法之间转化。
Input
第一行是一个正整数n(1<=n<=10^5), 表示测试数据的数量。
接下来n行,每行一串字符,表示一个位置,输入保证所有的位置都是正确的,没有一个位置的行号或者列号超过10^ 6。
Output
输出n行,每行是对应的位置的转化结果。
Sample Input 2 R23C55 BC23 Sample Output BC23 R23C55
题目链接:
********************************************
题意:
分析:
AC代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <cmath> 6 #include <stack> 7 #include <map> 8 #include <vector> 9 using namespace std; 10 11 #define N 12000 12 #define INF 0x3f3f3f3f 13 14 char s[N]; 15 int len; 16 17 void change1(int n) 18 { 19 if(n>26) 20 change1((n-1)/26); 21 22 printf("%c",(n-1)%26+'A'); 23 } 24 25 void p(char s[],int z) 26 { 27 int hang=0,lie=0,i; 28 for(i=1;i<z;i++) 29 hang=hang*10+s[i]-'0'; 30 for(i=z+1;i<len;i++) 31 lie=lie*10+s[i]-'0'; 32 33 change1(lie); 34 printf("%d ", hang); 35 } 36 37 void rc(char s[]) 38 { 39 int hang=0,i,z,lie; 40 41 for(i=0;i<len;i++) 42 if(s[i]>='0'&&s[i]<='9') 43 { 44 z=i; 45 break; 46 } 47 48 for(i=z;i<len;i++) 49 hang=hang*10+s[i]-'0'; 50 51 lie=s[0]-64; 52 for(i=1;i<z;i++) 53 lie=lie*26+s[i]-64; 54 55 printf("R%dC%d ", hang,lie); 56 } 57 58 int main() 59 { 60 int w,T,i,z; 61 62 scanf("%d", &T); 63 64 while(T--) 65 { 66 w=0; 67 scanf("%s", s); 68 len=strlen(s); 69 70 if((s[0]=='R')&&(s[1]>='0'&&s[1]<='9')) 71 { 72 for(i=2;i<len;i++) 73 if(s[i]=='C') 74 { 75 z=i; 76 w=1; 77 break; 78 } 79 } 80 81 if(w==1) 82 p(s,z); 83 else 84 rc(s); 85 } 86 return 0; 87 }