Codeforces Beta Round #1(B. Spreadsheets)

这题就是进制转换  (这里是26进制)

#include "bits/stdc++.h"
 
using namespace std;
int t;
string s;
map<char,int>mp;
// 判断是转换的是哪一种类型
bool ss(string sl){
    int len = sl.size();
    int g=0;
    for(int i=0;i<len;i++){
        if(g==0 && s[i]>='A'&&s[i]<='Z'){
            g++;
        }else if(g == 1 && s[i]>='0' && s[i]<='9'){
            g++;
        }else if(g==2 && s[i]>='A'&&s[i]<='Z'){
            g++;
        }else if(g==3 && s[i]>='0'&&s[i]<='9'){
            g++;
        }
    }
    if(g == 2) return false;
    else return true;
}
// 预处理一下字母相对应的值,这里也可以用char数组 或者字符串写  写法多种 
void init(){
    mp['A']=1;mp['B']=2;mp['C']=3;mp['D']=4;mp['E']=5;mp['F']=6;
    mp['G']=7;mp['H']=8;mp['I']=9;mp['J']=10;mp['K']=11;mp['L']=12;
    mp['M']=13;mp['N']=14;mp['O']=15;mp['P']=16;mp['Q']=17;mp['R']=18;
    mp['S']=19;mp['T']=20;mp['U']=21;mp['V']=22;mp['W']=23;mp['X']=24;
    mp['Y']=25;mp['Z']=26;
}
int main()
{
    cin >> t;
    init();
    while (t--)
    {
        cin >> s;
        if(ss(s)){
            int f=0;
            int a1=0,a2=0;
            // 取出2个数字
            for(int i=0 ;i < s.size() ;i++){
                if(s[i] == 'C') f=1;
                if(f==0 && s[i]>='0'&&s[i]<='9'){
                    a1= a1*10 + (s[i]-'0');
                }else if(f==1 && s[i]>='0'&&s[i]<='9'){
                    a2= a2*10 + (s[i]-'0');
                }
            }
            string c="";
            while (a2)
            {
                // 因为是26倍数 所以要减去26  因为进制转换第一位不都是 每位的0次方 所以刚开始                要判断下
                if(a2%26 == 0){
                    a2-=26;
                    c+='Z';
                }else{
                    int k = a2%26;
                    for(auto i:mp){
                        if(i.second==k){
                            c+=i.first;
                            break;
                        }
                    }
                }
                a2/=26;
            }
            // 逆转一下  因为我是倒着加的
            reverse(c.begin(),c.end());
            cout << c << a1 << endl;
        }else{
            string a="",b="";
            for(int i=0;i<s.size();i++){
                if(s[i]>='A'&&s[i]<='Z') a+=s[i];
                else b+=s[i];
            }
            int ans = a.size();
            int sum = 0,cnt=1;
            for(int i=ans-1;i>=0;i--){
                sum+= mp[a[i]]*cnt;
                cnt*=26;
            }
            cout << "R" << b <<"C"<<sum<<endl;
        }
    }
 
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_53013914/article/details/120080227