CSP2021模拟赛:T2-Excel计数法

【题目描述】
在 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


 

上一篇:AB 测试的原理及要点


下一篇:mysql数据恢复:.frm和.ibd,恢复表结构和数据