基础练习 十六进制转十进制
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
技巧先将16进制转换成2进制,在将二进制转换成8进制;
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1;
string s2;
int n;
cin>>n;
while(n--)
{s2="";
cin>>s1;
int s,x=0;
for(int i=0;i<s1.length();i++)
{
switch(s1[i])
{
case '0':s2+="0000";break;
case '1':s2+="0001";break;
case '2':s2+="0010";break;
case '3':s2+="0011";break;
case '4':s2+="0100";break;
case '5':s2+="0101";break;
case '6':s2+="0110";break;
case '7':s2+="0111";break;
case '8':s2+="1000";break;
case '9':s2+="1001";break;
case 'A':s2+="1010";break;
case 'B':s2+="1011";break;
case 'C':s2+="1100";break;
case 'D':s2+="1101";break;
case 'E':s2+="1110";break;
case 'F':s2+="1111";break;
}
}if(s2.length()%3==1)
{
s2="00"+s2;
}
else if(s2.length()%3==2)
{
s2='0'+s2;
}
for(int i=0;i<s2.length();i+=3)
{
s=(s2[i]-'0')*4+(s2[i+1]-'0')*2+(s2[i+2]-'0');
if(s)
x=1;//此处是防止出现前导0;
if(x)
cout<<s;
}
cout<<endl;
}
return 0;
}
16进制转换成2进制 16进制每个数都可以换成4位数的二进制
二进制转换成为8进制是 3个数一体 例如 1 001 111 这个二进制转换成为8进制是 1*4+1*2+1=7;0*4+0*2+1=1;1*1=1;呢么这个数为117;
二进制到16进制也是这样转换 只不过需要 的是*1 *2 *4 *8;