十六进制转换成十进制数字,可以采用字符串转数字的形式,十六进制的格式表示为0x****,当以字符串形式读入时,其中的数据元素只包含了'0'到'9'与'A'到'F',字符转数字的方法要牢记
例如将字符'0'~'9'转化成数字 需要该字符如'5'减去'0',即可;
将字符'A'到'F'转化成十进制数字 需要该字符如'A'减去'A',再加上10即可。
将字符串从后往前遍历,依此用pow(16,位次)进行加权,求和,可得到结果,只是需要的时间比较长。
代码如下

#include<iostream>
#include<string>
#include<math.h>
using namespace std;
int main(){
    string s;
    while(getline(cin,s)){
        int n=s.size();
        int sum=0;
        for(int i=n-1;i>0;i--)
        {
            if(s[i]>='0'&&s[i]<='9'){
                sum=sum+(s[i]-'0')*pow(16,n-i-1);
            }
            if(s[i]>='A'&&s[i]<='F'){
                sum=sum+(s[i]-'A'+10)*pow(16,n-i-1);
            }
        }
        cout<<sum<<endl;
    }
          return 0;
}