十进制转十六进制
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
思路:将十进制->二进制->十六进制
入坑:1.转换为二进制后每四位每四位进行转换成十六进制,当剩下的不足四位时,应当跳出,再对剩余的3 2 1 进行讨论
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
const int Max=500005;
int arr[Max];
char str[55], str1[505],str2[505];
string getBin(int num){//低->高
string str="";
while(num){
if(num%2){
str+='1';
}else{
str+='0';
}
num/=2;
}
return str;
}
int main()
{
int i;
unsigned long long num;
cin>>num;
//get 二进制;
string s=getBin(num);
int len=s.length();
int len1=0;
// cout<<s<<endl;
// cout<<"len:"<<len<<endl;
for(i=0;i<len;i=i+4){
if((i+3)<=len-1){
if(s[i]=='0'&&s[i+1]=='0'&&s[i+2]=='0'&&s[i+3]=='0'){
str1[len1++]='0';
}else if(s[i]=='1'&&s[i+1]=='0'&&s[i+2]=='0'&&s[i+3]=='0'){
str1[len1++]='1';
}else if(s[i]=='0'&&s[i+1]=='1'&&s[i+2]=='0'&&s[i+3]=='0'){
str1[len1++]='2';
}else if(s[i]=='1'&&s[i+1]=='1'&&s[i+2]=='0'&&s[i+3]=='0'){
str1[len1++]='3';
}else if(s[i]=='0'&&s[i+1]=='0'&&s[i+2]=='1'&&s[i+3]=='0'){
str1[len1++]='4';
}else if(s[i]=='1'&&s[i+1]=='0'&&s[i+2]=='1'&&s[i+3]=='0'){
str1[len1++]='5';
}else if(s[i]=='0'&&s[i+1]=='1'&&s[i+2]=='1'&&s[i+3]=='0'){
str1[len1++]='6';
}else if(s[i]=='1'&&s[i+1]=='1'&&s[i+2]=='1'&&s[i+3]=='0'){
str1[len1++]='7';
}else if(s[i]=='0'&&s[i+1]=='0'&&s[i+2]=='0'&&s[i+3]=='1'){
str1[len1++]='8';
}else if(s[i]=='1'&&s[i+1]=='0'&&s[i+2]=='0'&&s[i+3]=='1'){
str1[len1++]='9';
}else if(s[i]=='0'&&s[i+1]=='1'&&s[i+2]=='0'&&s[i+3]=='1'){
str1[len1++]='A';
}else if(s[i]=='1'&&s[i+1]=='1'&&s[i+2]=='0'&&s[i+3]=='1'){
str1[len1++]='B';
}else if(s[i]=='0'&&s[i+1]=='0'&&s[i+2]=='1'&&s[i+3]=='1'){
str1[len1++]='C';
}else if(s[i]=='1'&&s[i+1]=='0'&&s[i+2]=='1'&&s[i+3]=='1'){
str1[len1++]='D';
}else if(s[i]=='0'&&s[i+1]=='1'&&s[i+2]=='1'&&s[i+3]=='1'){
str1[len1++]='E';
}else if(s[i]=='1'&&s[i+1]=='1'&&s[i+2]=='1'&&s[i+3]=='1'){
str1[len1++]='F';
}
}
else
break;
}
// cout<<"i:"<<i<<endl;
i=len-i;//i of the result express the number for left thing.
// cout<<"i:"<<i<<endl;
// cout<<i<<endl;
if(i==3){
if(s[len-3]=='0'&&s[len-2]=='0'&&s[len-1]=='0'){
str1[len1++]='0';
}else if(s[len-3]=='1'&&s[len-2]=='0'&&s[len-1]=='0'){
str1[len1++]='1';
}else if(s[len-3]=='0'&&s[len-2]=='1'&&s[len-1]=='0'){
str1[len1++]='2';
}else if(s[len-3]=='1'&&s[len-2]=='1'&&s[len-1]=='0'){
str1[len1++]='3';
}else if(s[len-3]=='0'&&s[len-2]=='0'&&s[len-1]=='1'){
str1[len1++]='4';
}else if(s[len-3]=='1'&&s[len-2]=='0'&&s[len-1]=='1'){
str1[len1++]='5';
}else if(s[len-3]=='0'&&s[len-2]=='1'&&s[len-1]=='1'){
str1[len1++]='6';
}else if(s[len-3]=='1'&&s[len-2]=='1'&&s[len-1]=='1'){
str1[len1++]='7';
}
}else if(i==2){
if(s[len-2]=='0'&&s[len-1]=='0'){
str1[len1++]='0';
}else if(s[len-2]=='1'&&s[len-1]=='0'){
str1[len1++]='1';
}else if(s[len-2]=='0'&&s[len-1]=='1'){
str1[len1++]='2';
}else if(s[len-2]=='1'&&s[len-1]=='1'){
str1[len1++]='3';
}
}else if(i==1){
if(s[len-1]=='0')
str1[len1++]='0';
else if(s[len-1]=='1')
str1[len1++]='1';
}
// cout<<str1<<endl;
// if(i<5;)
int flag=0;
unsigned long long sum=0;
for(int i=len1-1;i>=0;i--){
flag=1;
cout<<str1[i];
}
if(flag==0){
cout<<'0';
}
cout<<endl;
return 0;
}