思路:例如0xAA这个数字,我们从低位向高位遍历,忽略开头的0x 所以我们的遍历写法是for(int i=str.size()-1,i>=2;i--) 如果这个遍历到的字符是0-9这些数字,我们就将其减去0,求ASCII码的差值,例如0和0的插值是0,1和0的差值是1,差值恰好等于十进制中该位的数值。如果遍历的字符是A到F这些字符串,我们就将其减去“A”求ASCII码的差值,例如'A'-'A'=0,'B'-'A'=1,那么观察可以发现,ASCII码差值+10对应者这个位十进制的数值。依次类推,我们得到每个位在十进制的数值,再乘以这个位的幂,就能得到答案。

#include<string>
#include<math.h>
using namespace std;
  
int main(){
    string str;
    int i;
    int level=0;//十六进制的位数。
    int result=0;//转换为十进制后的结果。
    while(cin>>str){
        for(i=str.size()-1;i>=2;i--){//从低位到高位遍历。
            //cout<<str[i];
            if(str[i]>='0'&&str[i]<='9'){
                //cout<<str[i]-'0';
                result+=(str[i]-'0')*pow(16,level);
                level++;
            };
            if(str[i]>='A'&&str[i]<='F'){
                //cout<<str[i]-'A';
                result+=(str[i]-'A'+10)*pow(16,level);
                level++;
            };    
            
        }
        cout<<result<<endl;
        level=0;//level归零
        result=0;//result归零
    }
    return 0;
}