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;
} 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1egenda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值