16进制转10进制
思路:从最低位开始(最右边),每一位提取出来,乘16的(位数-1)次方,结果求和即可。(对10-15,每一个数进行特判,也就是ABCDEF)注意:对于16进制数来说,10-15大小写都可,所以只需要修改特判条件即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
char jinzhi16[100];//16进制数
int jinzhi10[100];//10进制数
long long c=0,d,e=0;//c代表求和
gets(jinzhi16); //获取16进制数
d=strlen(jinzhi16);
for(int i=0;i<strlen(jinzhi16);i++){//特判 ,且存入整形数组
if(jinzhi16[i]=='A')
jinzhi10[i]=10;
else if(jinzhi16[i]=='B')
jinzhi10[i]=11;
else if(jinzhi16[i]=='C')
jinzhi10[i]=12;
else if(jinzhi16[i]=='D')
jinzhi10[i]=13;
else if(jinzhi16[i]=='E')
jinzhi10[i]=14;
else if(jinzhi16[i]=='F')
jinzhi10[i]=15;
else jinzhi10[i]=jinzhi16[i]-'0';
}
for(int i=d-1;i>=0;i--){ //转换16进制数转成10进制数
c+=jinzhi10[i]*pow(16,e);
e++;
}
cout<<c; //输出
return 0;
}
10进制转16进制
思路:十进制数对16进行取余,相除操作,存入数组,对10-15进行特判输出即可。注意0的情况的特判。注意:对于16进制数来说,10-15大小写都可,所以只需要修改特判条件即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long a,c=0;
long long jinzhi16[100];//
cin>>a;//输入10进制数
if(a==0) //对0进行特判
cout<<0;
else
while(a){ //进制转换
jinzhi16[c]=a%16;
c++;
a/=16;
}
for(int i=c-1;i>=0;i--){ //特判输出
if(jinzhi16[i]==10)
cout<<'A';
else if(jinzhi16[i]==11)
cout<<'B';
else if(jinzhi16[i]==12)
cout<<'C';
else if(jinzhi16[i]==13)
cout<<'D';
else if(jinzhi16[i]==14)
cout<<'E';
else if(jinzhi16[i]==15)
cout<<'F';
else cout<<jinzhi16[i];
}
return 0;
}