【CodeForces】[1B]Spreadsheet

这里写图片描述

转换类的题目
难度还是有些的
不过一点一点写 感觉还好

可以当作26进制来方便思考转换

#include<stdio.h>
#include<string.h>
char s[10];
int l;
bool judge() {
    if(s[0]=='R'&&s[1]<='9'&&s[1]>='0') {
        for(int i=2; i<l; i++) {
            if(s[i]=='C')
                return true;
        }
    }
    return false;
}
int f(int m,int k) {
    int sum=1;
    while(k--)
        sum*=m;
    return sum;
}
int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        scanf("%s",s);
        l=strlen(s);
        if(judge()) {
            int tc=0;
            for(int i=0; i<l; i++) {
                if(s[i]=='C') {
                    tc=i;
                    break;
                }
            }
            int a=0,b=0;
            for(int i=1; i<tc; i++) {
                a=a*10+s[i]-'0';
            }
            for(int i=tc+1; i<l; i++) {
                b=b*10+s[i]-'0';
            }
            char res[10];
            int ti=0;
            while(b) {
                if(b%26) {
                    res[ti++]='A'-1+b%26;
                    b/=26;
                } else {
                    res[ti++]='Z';
                    b/=26;
                    b--;
                }
            }
            for(int i=ti-1; i>=0; i--)
                printf("%c",res[i]);
            printf("%d
",a);
        } else {
            int ti=0;
            for(int i=0; i<l; i++)
                if(s[i]<='9'&&s[i]>='0') {
                    ti=i;
                    break;
                }
            int x=0;
            for(int i=ti; i<l; i++)
                x=x*10+s[i]-'0';
            printf("R%dC",x);
            x=0;
            int k=1;
            for(int i=0; i<ti; i++) {
                x+=(s[i]-'A'+1)*f(26,ti-k);
                k++;
            }
            printf("%d
",x);
        }
    }
    return 0;
}

题目地址:【CodeForces】[1B]Spreadsheet

原文地址:https://www.cnblogs.com/BoilTask/p/12569586.html