C++十进制转十六进制

思路:

将十进制转化为二进制,然后每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;
} 

猜你喜欢

转载自blog.csdn.net/jd_457619512/article/details/88034057