思路:
将十进制转化为二进制,然后每4位二进制对应1位十六进制,按照相应的数字输出即可。
(用map映射10对应A,11对应B,12对应C.....)
#include"iostream"
#include"algorithm"
#include"string"
#include"map"
using namespace std;
int main()
{
long long int Dec,num;
cin>>Dec;//输入十进制,如果是0输出0
if(Dec==0){
cout<<0;
return 0;
}
string Bin = "";
string one(1,'1');
string zer(1,'0');
while(Dec){
//这里牵扯string转int,上面声明one,zer为string型就可以不用转换
num=Dec%2;
if(num==1)
Bin+=one;
else
Bin+=zer;
Dec/=2;
}
reverse(Bin.begin(),Bin.end());//逆序
if(Bin.length()%4==3)//凑为4的倍数
Bin="0"+Bin;
if(Bin.length()%4==2)
Bin="00"+Bin;
if(Bin.length()%4==1)
Bin="000"+Bin;
map<int,string> mymap;//映射大于10所对应的十六进制
mymap[10] = "A";
mymap[11] = "B";
mymap[12] = "C";
mymap[13] = "D";
mymap[14] = "E";
mymap[15] = "F";
map<int,string>::iterator iter;
int sum=0;
for(int i=0;i<=Bin.length()-4;i+=4){
sum=8*(Bin[i]-'0')+4*(Bin[i+1]-'0')+2*(Bin[i+2]-'0')+(Bin[i+3]-'0');
if(sum<10)
cout<<sum;
else{
iter = mymap.find(sum);
cout<<iter->second;
}
sum=0;
}
return 0;
}