大家有没有留意过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>
using namespace std;
int main(){
string s;
while(cin>>s){
char a[25];
int flag=0;
if(s=="#") break;
int num=0;
int cnt=0;
for(int i=0;i<s.length();i++){
if(s[i]>='0'&&s[i]<='9'){
num=num*10+s[i]-'0';
}
else{
flag=1;
num=num*26+s[i]-'A'+1;
}
}
if(flag){
cout<<num<<endl;
}
else{
while(num){
a[cnt++]='A'+(num-1)%26;
num=(num-1)/26;
}
for(int j=cnt-1;j>=0;j--){
printf("%c",a[j]);
}
cout<<endl;
}
}
return 0;
}