#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