此解法为天下最笨的解法,不过自己想出来还是很高兴的

#include<iostream>
#include<string>
#include<set>
#include<math.h>
using namespace std;
set<char> r;//此字符集存储字符'0'~'9';
void zh(string s)
{
     r.insert('0');
     r.insert('1');
     r.insert('2');
     r.insert('3');
     r.insert('4');
     r.insert('5');
     r.insert('6');
     r.insert('7');
     r.insert('8');
     r.insert('9');
    int res=0;
    for(int i=s.size()-1;i>=2;i--)
    {
        int temp;
        if(r.find(s[i])!=r.end())//s[i]是0~9
        {
            temp=(int)s[i]-48;//'0'转换为int是48
        }
        else
        {
            temp=(int)s[i]-55;//'A'转换为int是65
        }

        if(s.size()-i-1==0)
        {
            res+=temp;
        }
        else
        {
            res+=temp*pow(16,(s.size()-i-1));//pow(x,n)计算x的n次方
        }
    }
    cout<<res<<endl;
}

int main()
{
    string s;
    while(cin>>s)
    {
        zh(s);
    }
    return 0;
}