Spreadsheets

很水的一道题,提醒自己要认真,做的头都快晕了。考虑26的特殊情况。

D - Spreadsheets

Time Limit:10000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

In the popular spreadsheets systems (for example, in Excel) the following numeration of columns is used. The first column has number A, the second — number B, etc. till column 26 that is marked by Z. Then there are two-letter numbers: column 27 has number AA, 28 — AB, column 52 is marked by AZ. After ZZ there follow three-letter numbers, etc.

The rows are marked by integer numbers starting with 1. The cell name is the concatenation of the column and the row numbers. For example, BC23 is the name for the cell that is in column 55, row 23.

Sometimes another numeration system is used: RXCY, where X and Y are integer numbers, showing the column and the row numbers respectfully. For instance, R23C55 is the cell from the previous example.

Your task is to write a program that reads the given sequence of cell coordinates and produce each item written according to the rules of another numeration system.

Input

The first line of the input contains integer number n (1 ≤ n ≤ 105), the number of coordinates in the test. Then there follow n lines, each of them contains coordinates. All the coordinates are correct, there are no cells with the column and/or the row numbers larger than 106.

Output

Write n lines, each line should contain a cell coordinates in the other numeration system.

Sample Input

Input

2R23C55BC23

Output

BC23R23C55
  1 #include<cstdio>
  2 #include<cstring>
  3 #include<cstdlib>
  4 #include<cctype>
  5 using namespace std;
  6 const int maxn=100;
  7 char str[maxn];
  8 int num[maxn];
  9 void print(int n)
 10 {
 11     if(n==1)
 12         printf("A");
 13     if(n==2)
 14         printf("B");
 15     if(n==3)
 16         printf("C");
 17     if(n==4)
 18         printf("D");
 19     if(n==5)
 20         printf("E");
 21     if(n==6)
 22         printf("F");
 23     if(n==7)
 24         printf("G");
 25     if(n==8)
 26         printf("H");
 27     if(n==9)
 28         printf("I");
 29     if(n==10)
 30         printf("J");
 31     if(n==11)
 32         printf("K");
 33     if(n==12)
 34         printf("L");
 35     if(n==13)
 36         printf("M");
 37     if(n==14)
 38         printf("N");
 39     if(n==15)
 40         printf("O");
 41     if(n==16)
 42         printf("P");
 43     if(n==17)
 44         printf("Q");
 45     if(n==18)
 46         printf("R");
 47     if(n==19)
 48         printf("S");
 49     if(n==20)
 50         printf("T");
 51     if(n==21)
 52         printf("U");
 53     if(n==22)
 54         printf("V");
 55     if(n==23)
 56         printf("W");
 57     if(n==24)
 58         printf("X");
 59     if(n==25)
 60         printf("Y");
 61     if(n==26||n<=0)
 62         printf("Z");
 63
 64 }
 65 int main()
 66 {
 67     int T;
 68     scanf("%d",&T);
 69     while(T--)
 70     {
 71         int q=0;
 72         scanf("%s",str);
 73         int len=strlen(str);
 74         int flag=1;
 75         int ok=0;
 76         int sum=0;
 77         int temp=0;
 78         int temp2=0;
 79         for(int i=0; i<len; i++)
 80         {
 81             if(flag==1&&isalpha(str[i])==0)
 82             {
 83                 flag=0;
 84                 temp2=i;
 85             }
 86             if(flag==0&&isalpha(str[i])!=0)
 87             {
 88                 ok=1;
 89                 temp=i;
 90                 break;
 91             }
 92         }
 93         if(ok)
 94         {
 95             int p=1;
 96             for(int i=len-1; i>temp; i--)
 97             {
 98                 sum+=(str[i]-‘0‘)*p;
 99                 p*=10;
100             }
101 //            if(sum%26==0) 考虑错了
102 //            {
103 //                while(sum>0)
104 //                {
105 //                    num[q++]=sum%26-1;
106 //                    if(sum==26)
107 //                        break;
108 //                    sum/=26;
109 //                }
110 //            }
111 //            else
112
113                 while(sum>0)
114                 {
115                     if(sum%26==0)
116                     {
117                         num[q++]=26;
118                         sum=sum/26-1;
119                     }
120                     else{
121                     num[q++]=sum%26;
122                     sum/=26;
123                 }
124             }
125             for(int i=q-1; i>=0; i--)
126             {
127                 // printf("%d ",num[i]);
128                 print(num[i]);
129             }
130             for(int i=1; i<temp; i++)
131                 printf("%c",str[i]);
132         }
133         else
134         {
135             printf("R");
136             for(int i=temp2; i<len; i++)
137                 printf("%c",str[i]);
138             printf("C");
139             int p=1;
140             for(int i=temp2-1; i>=0; i--)
141             {
142                 sum+=(str[i]-‘A‘+1)*p;
143                 p*=26;
144             }
145             printf("%d",sum);
146         }
147         printf("\n");
148     }
149 }
时间: 2024-11-05 02:34:18

Spreadsheets的相关文章

CodeForces 1B. Spreadsheets(模拟)

题目链接:http://codeforces.com/problemset/problem/1/B B. Spreadsheets time limit per test 10 seconds memory limit per test 64 megabytes input standard input output standard output In the popular spreadsheets systems (for example, in Excel) the following

Codeforces Beta Round #1 B. Spreadsheets

Codeblocks坏掉了,我不知道该怎么修,只能过两天重装系统了. 没办法.这个题是用Java写的,代码风格不好不要骂我~~ 题目大意: Excel表格那种坐标系统,和正常的坐标系统.用代码实现转换. 就是模拟题啊,代码量比较小. 下面是代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); i

Spreadsheets codeforces1B(模拟+进制转换)

http://codeforces.com/problemset/problem/1/B 题意:转换两种行和列的表示方法. 分析:(弱弱的说下一开始自己并不会写,只是想到AA=26*1+1,就想着用除法和余数来解决了,后来发现这么模拟下去,数据好大啊,心好累..然后就没有然后了).后来问的别人,告诉我用26进制转换(我去,我为啥想不到,啥都别说了,看代码) #include <iostream> #include <stdio.h> #include <string.h>

1B. Spreadsheets

题意:将两种不同表达方式进行转换,即26进制与10进制的转换,特殊的是,比如:26用Z表示,27用AA表示,即没有零. 题目链接:http://codeforces.com/problemset/problem/1/B #include <stdio.h> #include <string.h> char str[100000]; void zhuan1(char str[],int len) { int s1=0; int s2=0; sscanf(str,"R%dC%

Codeforces 1B Spreadsheets

零.题目链接:http://codeforces.com/contest/1/problem/B 一.审题 读完题目,题意清晰.说白了,就是先给了两种坐标形式:Excel表格里面每个单元格的列(字母组合)行(数字)坐标形式(e.g.BC23)与R(Row)XC(Column)Y坐标的形式,然后要求将一种转换成另一种,也就是互相转换. 然后需要转换坐标的数据量:n (1? ≤ n?≤?105) 坐标的数值大小范围:≤ 106 二.思路 首先根据输入的格式,我第一想法就是用vector<string

CF1B Spreadsheets

题意翻译 人们常用的电子表格软件(比如: Excel)采用如下所述的坐标系统: 第一列被标为A,第二列为B,以此类推,第26列为Z.接下来为由两个字母构成的列号: 第27列为AA,第28列为AB...在标为ZZ的列之后则由三个字母构成列号,如此类推. 行号为从1开始的整数. 单元格的坐标由列号和行号连接而成.比如,BC23表示位于第55列23行的单元格. 有时也会采用被称为RXCY的坐标系统,其中X与Y为整数,坐标(X,Y)直接描述了对应单元格的位置.比如,R23C55即为前面所述的单元格. 您

【Codeforces 1B】Spreadsheets

[链接] 我是链接,点我呀:) [题意] A~Z分别对应了1~26 AA是27依次类推 让你完成双向的转换 [题解] 转换方法说实话特别恶心>_< int转string 得像数位DP一样一位一位地确定每一位是啥. 具体的 1位数可以表示16个数字 2位数又可以表示16*16个数字 根据这个算出来int对应的字符串是多少位数的 然后再一点一点地试出来每一位是多少即可 [代码] import java.io.*; import java.util.*; public class Main { st

Codeforces Beta Round #1 B. Spreadsheets 题解

题目链接:http://codeforces.com/contest/1/problem/B题目大意:<电子表格>电子表格的第1列标记为A,第2列标记为B,……,第26列标记为Z.然后我们用两个字符来进行:第27列标记为AA,第28列标记为AB,……,第52列标记为AZ.……在ZZ之后,我们再使用三个字符来表示.如是循环……所以对于电子表格中的某一个元素,我们都可以按照上述方法标识它的列.比如,对于第55列第23行的元素,我们可以用“BC23”来表示它.我们称这是“第一种表示”. 除了“第一种

B - Spreadsheets CodeForces - 1B

在一些知名的表格处理系统中(比如: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是整数,分别表示行号和列