【题目描述】
在 Excel 中,用A表示第1列,B表示第2列,……,Z表示第26列,AA表示第27列,AB表示第28列,……,Z表示第52列,以此类推。
请写出一个函数,输入用字母表示的列号编码,输出它是第几列。
【输入格式】
一个仅包含大写字母的字符串。
【输出格式】
一行。表示该列在 Excel 中的列号。
【输入输出样例】
输入样例
AB
输出样例
28
【算法分析】
这道题本质上就是十进制和26进制之间的转化:
A=26^0+1=1
AA=26*(26^0+1) +1=26*A+1
AAA=26*[26*(26^0+1)+1]+1=26*AA+1
AB=2*26^0+1*26^1=26*A+2
ABC=3*26^0+2*26^1+1*26^2
【算法代码】
#include <bits/stdc++.h>
using namespace std;
int str2int() {
char ch[200];
scanf("%s",ch);
int size=strlen(ch);
int ans=0;
for(int i=0; i<size; i++) {
int tmp=ch[i]-'A';
if(tmp<0 || tmp>=26) {
printf("invalid input\n");
return -1;
}
ans=26*ans+tmp+1;
}
return ans;
}
int main() {
while(1) {
int ans=str2int();
printf("%d\n",ans);
}
return 0;
}
/*
in:
AB
out:
28
*/
【参考文献】
https://blog.csdn.net/yueqyueqyue/article/details/119857795
http://oj.code-fans.cn/blogof/chunzhen/blog/544
https://blog.csdn.net/hannea/article/details/25111051
https://blog.csdn.net/weixin_41318405/article/details/79681717