CodeFoces CF1B 半成品题解
点击此处跳转到此题 - 洛谷
或许如果你很懒,看这里也可以:
Spreadsheets
题面翻译
人们常用的电子表格软件(比如: Excel)采用如下所述的坐标系统:
第一列被标为 A,第二列为 B,以此类推,第 列为 Z。接下来为由两个字母构成的列号: 第 列为 AA,第 列为 AB 在标为 ZZ 的列之后则由三个字母构成列号,如此类推。
行号为从 开始的整数。
单元格的坐标由列号和行号连接而成。比如,BC23 表示位于第 列 行的单元格。
有时也会采用被称为 RXCY 的坐标系统,其中 与 为整数,坐标 , 直接描述了对应单元格的位置。比如,R23C55 即为前面所述的单元格。
您的任务是编写一个程序,将所给的单元格坐标转换为另一种坐标系统下面的形式。
输入
第一行一个整数 表示将会输入的坐标的数量。
接下来 行,每行一个坐标。
注意: 每个坐标都是正确的。此外不会出现行号或列号大于 的单元格。
输出 行,每行一个被转换的坐标。
输出
行,每行一个被转换的坐标。
样例 #1
样例输入 #1
2
R23C55
BC23
样例输出 #1
BC23
R23C55
###解题方法:函数
首先,BC23 转换到需要 R35C55
- 识别文字和数字
- 将其转换为两个
int类型的数据,分别为X,Y - 创建一个字符串,重新拼接为
R+X+C+Y
实例代码如下,实现了前两个步骤
int to_RXCY(string s)
{
int J=1; //*单次进制X
int JJ=1; //* 单次进制Y
for(int i=0;i<s.length();i++)
{
if(J==27) J=26;
if(s[i]>='A' && s[i]<='Z') {T+=s[i],X=X*J+(int(s[i])-64);J+=26;}
if(s[i]>='0' && s[i]<='9') Y=Y*JJ + (int(s[i])-48),JJ*=10;
}
}