#include <iostream>
using namespace std;
int qmi(int a,int b){
    int res = 1;
    while(b){
        if(b&1){
            res = res*a;
        }
        b>>=1;
        a*=a;
    }
    return res;
}
int main() {
    string s;
    cin>>s;
    int len = s.length();
    int res = 0;
    int idx = 0;
    for(int i = len-1;i>=2;i--){
        if(s[i]>='0'&&s[i]<='9'){
            res+=(s[i]-'0')*qmi(16,idx);
        }
        if(s[i]>='A'&&s[i]<='Z'){
            res+=(s[i]-'A'+10)*qmi(16,idx);
        }
        idx++;
    }
    cout<<res<<'\n';

}
// 64 位输出请用 printf("%lld")

使用快速幂计算16的次方,然后用每个字符所代表的数字相乘再相加即可,注意大写字母与‘A’的差值要加10

活动地址https://www.nowcoder.com/discuss/726480854079250432