(模拟、进制转换)

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 }
原文地址:https://www.cnblogs.com/weiyuan/p/5776444.html