问题描述:
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
解答:
整体思路:
任意进制数据转十进制数据的通法——每次前面的数据乘以X进制,再加上当前位数的值
细节处理:
十进制的存储类型务必满足小于等于8位的十六进制数,即16^8==2^32——unsigned int/unsigned long/long long unsigned long long——win32平台
1 #include<iostream> 2 #include<string> 3 4 using namespace std; 5 6 int main() 7 { 8 string dataX16; 9 cin>>dataX16; 10 11 unsigned int dataX10=0; 12 13 for(int i=0;i<=dataX16.length()-1;i++) 14 { 15 switch(dataX16[i]) 16 { 17 case \'0\': dataX10=dataX10*16+0; break; 18 case \'1\': dataX10=dataX10*16+1; break; 19 case \'2\': dataX10=dataX10*16+2; break; 20 case \'3\': dataX10=dataX10*16+3; break; 21 case \'4\': dataX10=dataX10*16+4; break; 22 case \'5\': dataX10=dataX10*16+5; break; 23 case \'6\': dataX10=dataX10*16+6; break; 24 case \'7\': dataX10=dataX10*16+7; break; 25 case \'8\': dataX10=dataX10*16+8; break; 26 case \'9\': dataX10=dataX10*16+9; break; 27 case \'A\': dataX10=dataX10*16+10; break; 28 case \'B\': dataX10=dataX10*16+11; break; 29 case \'C\': dataX10=dataX10*16+12; break; 30 case \'D\': dataX10=dataX10*16+13; break; 31 case \'E\': dataX10=dataX10*16+14; break; 32 case \'F\': dataX10=dataX10*16+15; break; 33 } 34 } 35 36 cout<<dataX10<<endl; 37 38 return 0; 39 } 40 41