-
Notifications
You must be signed in to change notification settings - Fork 0
CF 1B
Alex Wind edited this page Sep 25, 2013
·
3 revisions
在一些流行的电子表格软件中(例如 Excel ),常常使用下面一种对列编号的方式:第一列编号为 A ,第二列编号为 B ……等到 26 行编号为 Z 之后,开始用两个字母编号:第27行编号为 AA ,28行编号为 AB ,52行编号为 AZ ……等编到 ZZ 之后,用三个字母编号,以此类推。
表格的行则从1开始编号,单元格的名字就是将行和列的编号合起来。例如 BC23 就是第23行、第55列单元格的名字。
还有另外一种编号方式: RXCY , X 和 Y 分别是行号和列号。例如, R23C55 就指的是前面 BC23 所表示的单元格。
你的任务是编写一个程序,读取任意一种编号方式,并将其转化为另外一种编号方式输出。
第一行输入一个整数 n (1 ≤ n ≤ 105),表示有多少个编号。之后 n 行,每行是一个编号。可以保证所有编号都是正确的,且行号和列号都不会超过106。
输出 n 行,每行包含一个用另外一种编号方式表示的单元格编号。
这道题的关键就是用字母编号和用数字编号如何互相转化。我们可以把用字母编号看作一个26进制的数,然后去做十进制数和二十六进制数的相互转化就可以了。不过还需要注意几点,这里和进制转化稍有点不同,因为数字编号是从1开始的,而字母编号在最低位和其他位时, A-Z 所对应的数值也不同。
另外,如果用 Python 解决的这道题,可以直接用正则表达式来区分两种编号方式,并且还能同时找出行列编号的部分。第一种编号方式的正则表达式为 ([A-Z]+)(\d+) ,第二种为 R(\d+)C(\d+) 。