思路:例如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;
}