#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
string in = "";
int tmp,j=-1;
long long sum=0;
cin>>in;
for(int i=in.length()-1;i>=0;i--){
switch(in[i]){
case 'A':
tmp=10;
j+=1;
break;
case 'B':
tmp=11;
j+=1;
break;
case 'C':
tmp=12;
j+=1;
break;
case 'D':
tmp=13;
j+=1;
break;
case 'E':
tmp=14;
j+=1;
break;
case 'F':
tmp=15;
j+=1;
break;
default:
tmp=in[i]-'0';
j+=1;
}
sum=sum+tmp*pow(16,j);
}
cout<<sum;
return 0;
}
二、十六进制转八进制
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n;
cin>>n;
string str,newstr;
for(int i=0;i<n;i++){
cin>>str;
newstr="";
for(int j=0;j<str.length();j++){
switch(str[j]){
case '0':newstr+="0000";break;
case '1':newstr+="0001";break;
case '2':newstr+="0010";break;
case '3':newstr+="0011";break;
case '4':newstr+="0100";break;
case '5':newstr+="0101";break;
case '6':newstr+="0110";break;
case '7':newstr+="0111";break;
case '8':newstr+="1000";break;
case '9':newstr+="1001";break;
case 'A':newstr+="1010";break;
case 'B':newstr+="1011";break;
case 'C':newstr+="1100";break;
case 'D':newstr+="1101";break;
case 'E':newstr+="1110";break;
case 'F':newstr+="1111";break;
default:break;
}
}
if(newstr.length()%3==1)newstr="00"+newstr;
if(newstr.length()%3==2)newstr="0"+newstr;
int flag=0; //用来排除开头000的情况
for(int k=0;k<newstr.length()-2;k+=3){
int p=4*(newstr[k]-'0')+2*(newstr[k+1]-'0')+(newstr[k+2]-'0');
if(p!=0)flag=1;
if(flag)cout<<p;
}
cout<<endl;
}
return 0;
}
三、十进制转十六进制
#include<iostream>
#include<cstring>
#include<sstream>
using namespace std;
int main(){
string c,s="";
int n;
cin>>n;
if(n==0)cout<<0;
while(n!=0){
switch(n%16){
case 10:s="A"+s;break;
case 11:s="B"+s;break;
case 12:s="C"+s;break;
case 13:s="D"+s;break;
case 14:s="E"+s;break;
case 15:s="F"+s;break;
default:
stringstream ss;
ss<<n%16;
s=ss.str()+s;
break;
}
n=n/16;
}
cout<<s;
return 0;
}