题目链接点击打开链接
当十六进制位数少时,直接用输入输出格式操作:
#include<cstdio>
using namespace std;
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int t;
scanf("%x",&t);
printf("%o\n",t);
}
return 0;
}
当十六进制数较多时,先十六进制转二进制再转八进制:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
string s1,s2;//s1为输入的初始的十六进制串,s2为转化成的二进制串
cin>>s1;//string字符串的读入方式
s2="";//初始化
for(int i=0;i<s1.length();i++){//s.length()字符串长度计算函数
switch(s1[i]){
case'0':s2+="0000";break;
case'1':s2+="0001";break;
case'2':s2+="0010";break;
case'3':s2+="0011";break;
case'4':s2+="0100";break;
case'5':s2+="0101";break;
case'6':s2+="0110";break;
case'7':s2+="0111";break;
case'8':s2+="1000";break;
case'9':s2+="1001";break;
case'A':s2+="1010";break;
case'B':s2+="1011";break;
case'C':s2+="1100";break;
case'D':s2+="1101";break;
case'E':s2+="1110";break;
case'F':s2+="1111";break;
}
}
if(s2.length()%3==1) s2="00"+s2;//三个二进制为一个八进制,确保长度
if(s2.length()%3==2) s2="0"+s2;
int flag=0;
for(int i=0;i<=s2.length()-3;i+=3){
int num=4*(s2[i]-'0')+2*(s2[i+1]-'0')+(s2[i+2]-'0');
if(num) flag=1;//忽略前导0
if(flag) printf("%d",num);
}
printf("\n");
}
return 0;
}