#include<iostream>
#include<string>
using namespace std;
int main()
{
string s[10],s2[10]; // s2保存对应的十进制
int n;
cin>>n;
for(int k=0;k<n;k++){
cin>>s[k];
}
for(int i=0;i<n;i++){ // s2[i]保存转化后的十进制
s2[i]="";
for(int j=0;j<s[i].length();j++){
switch(s[i][j]){
case '0': s2[i]+="0000";break;
case '1': s2[i]+="0001";break;
case '2': s2[i]+="0010";break;
case '3': s2[i]+="0011";break;
case '4': s2[i]+="0100";break;
case '5': s2[i]+="0101";break;
case '6': s2[i]+="0110";break;
case '7': s2[i]+="0111";break;
case '8': s2[i]+="1000";break;
case '9': s2[i]+="1001";break;
case 'A': s2[i]+="1010";break;
case 'B': s2[i]+="1011";break;
case 'C': s2[i]+="1100";break;
case 'D': s2[i]+="1101";break;
case 'E': s2[i]+="1110";break;
case 'F': s2[i]+="1111";break;
default:break;
}
}
if(s2[i].length()%3==2)
s2[i] = "0"+s2[i]; // 字符串的连接,有左右顺序之分
if(s2[i].length()%3==1)
s2[i] = "00"+s2[i];
}
for(int i=0;i<n;i++){
int len,num;
int flag = 0; // 判断前导 0
len = s2[i].length();
for(int j=0;j<len;j+=3){ // 注意 j j+1 j+2
num = (s2[i][j]-'0')*4 + (s2[i][j+1]-'0')*2 + (s2[i][j+2]-'0')*1;
if(num) // num开启打印的第一个数字,flag:1打印
flag = 1;
if(flag)
cout<<num;
}
cout<<endl;
}
return 0;
}
【蓝桥】基础练习 十六进制转八进制
最新推荐文章于 2020-02-13 10:09:43 发布