大家有没有留意过Excel表格中列名的规律呢?是这样的:A B C ... Y Z AA AB AC ... AY AZ BA BB BC ... BY BZ ... ZZ ... AAA ...
如果没看懂,请打开Excel程序仔细观察一下~~
每一列都是有序号的,从1
开始编号,即:列A B C ... Y Z AA AB ...
的编号依次是 1 2 3 ... 25 26 27 28 ...
现在,请编写程序,按照上述规律,把输入的列名和列序号进行相互转换(不用考虑Excel软件实际允许的最多列数)。
输入格式:
输入由若干行组成,每行的内容是以下三种之一:
- 长度不超过6的由大写字母组成的字符串,表示一个列名
- 不超过9位数字的正整数,表示一个列序号
- 符号
#
,表示输入结束
输出格式:
对于在输入结束符#
之前出现的每一行输入,若输入为列名,在一行内打印对应的列序号;若输入为列序号,在一行内打印对应的列名。
输入样例:
A
3
AB
29
#
输出样例:
1 C 28 AC
强哥出的题还挺好玩,类似进制转换吧。。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <sstream> using namespace std; string s; int d; void print(int t) { if(!t) return; print((t - 1) / 26); putchar('A' + (t - 1) % 26); } void print(string t) { int d = 0; for(int i = 0;i < t.size();i ++) { d = d * 26 + t[i] - 'A' + 1; } printf("%d\n",d); } int main() { while(cin >> s && s != "#") { if(isdigit(s[0])) { istringstream(s) >> d; print(d); putchar('\n'); } else { print(s); } } }
如果觉得有帮助,点个推荐啦~