1.先转化为二进制
#include<iostream>
using namespace std;
int main()
{
int n,m,i,j,k;
cin>>n;
string sixteen[10];
for(i=0;i<n;i++){
cin>>sixteen[i];
}
for(i=0;i<n;i++){
string tow;
string eight;
char eig;
for(j=0;j<sixteen[i].size();j++){//注意什么时候用单引号什么时候用双引号
switch(sixteen[i][j]){
case '0':tow+="0000";break;
case '1':tow+="0001";break;
case '2':tow+="0010";break;
case '3':tow+="0011";break;
case '4':tow+="0100";break;
case '5':tow+="0101";break;
case '6':tow+="0110";break;
case '7':tow+="0111";break;
case '8':tow+="1000";break;
case '9':tow+="1001";break;
case 'A':tow+="1010";break;
case 'B':tow+="1011";break;
case 'C':tow+="1100";break;
case 'D':tow+="1101";break;
case 'E':tow+="1110";break;
case 'F':tow+="1111";break;
default:break;
}
}
m=tow.size()%3;//用“0”补齐位数(属于字符串所以用双引号)
if(m==1)
tow.insert(0,"00");
else if(m==2)
tow.insert(0,"0");
if(!(tow[0]=='0'&&tow[1]=='0'&&tow[2]=='0'))//很重要,用来去除首位0
{
eig=(tow[0]-'0')*4+(tow[1]-'0')*2+(tow[2]);
eight=eight+eig;
}
for(k=3;k<tow.size();k=k+3){
if(tow.substr(k,3)=="000")
eight+="0";
else if(tow.substr(k,3)=="001")
eight+="1";
else if(tow.substr(k,3)=="010")
eight+="2";
else if(tow.substr(k,3)=="011")
eight+="3";
else if(tow.substr(k,3)=="100")
eight+="4";
else if(tow.substr(k,3)=="101")
eight+="5";
else if(tow.substr(k,3)=="110")
eight+="6";
else if(tow.substr(k,3)=="111")
eight+="7";
}
cout<<eight<<endl;
}
return 0;
}
2.先转为十进制(编译器测试正确然而练习系统给了我0分2333)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include<iostream>
using namespace std;
int main()
{
int n,j;
scanf("%d",&n);
long long a[n];
string strHex[10];
int i, len = 0, temp = 0;
long long nDec = 0;
for(j=0;j<n;j++){
cin>>strHex[j];
for (i = 0; strHex[j][i] != '\0'; i++)
{
len = strHex[j].size();
switch(strHex[j][i])
{
case 'A': temp = 10; break;
case 'B': temp = 11; break;
case 'C': temp = 12; break;
case 'D': temp = 13; break;
case 'E': temp = 14; break;
case 'F': temp = 15; break;
default: temp = strHex[j][i]-'0'; break;
}
nDec += (temp*pow(16,len-1-i));
}
a[j]=nDec;
nDec=0;
}
for(j=0;j<n;j++){
printf("%o\n",a[j]);
}
return 0;
}