首先根据提示要先转成某进制数,十进制由于数的长度排除,所以确定转为二进制,再由二进制每三位一转,转成八进制。
代码如下:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int n=0,i=0,m=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
string s1,s2,s3;
cin>>s1;
m=0;
s2="";
s3="";//置空
for(int j=0;j<s1.size();j++)//遍历输入字符串中每个元素
{
if(s1[j]=='0') s2+="0000";
if(s1[j]=='1') s2+="0001";
if(s1[j]=='2') s2+="0010";
if(s1[j]=='3') s2+="0011";
if(s1[j]=='4') s2+="0100";
if(s1[j]=='5') s2+="0101";
if(s1[j]=='6') s2+="0110";
if(s1[j]=='7') s2+="0111";
if(s1[j]=='8') s2+="1000";
if(s1[j]=='9') s2+="1001";
if(s1[j]=='A') s2+="1010";
if(s1[j]=='B') s2+="1011";
if(s1[j]=='C') s2+="1100";
if(s1[j]=='D') s2+="1101";
if(s1[j]=='E') s2+="1110";
if(s1[j]=='F') s2+="1111";
} //穷举将16进制s1转换为2进制s2
if(s2.size()%3==1)//字符串头部余留一位数字,需添加两个零
{
s2="00"+s2;
}
if(s2.size()%3==2)//字符串头部余留两位数字,需添加一个零
{
s2="0"+s2;
}
//cout<<s2<<endl;
for(int k=0;k<s2.size();k=k+3)
{
s3+=(s2[k]-'0')*4+(s2[k+1]-'0')*2+(s2[k+2]-'0')+'0';
}
//cout<<s3<<endl;
while(s3[m]=='0')
{
m++;
break;
}
//printf("m的值:%d\n",m);
for(;m<s3.size();m++)
{
cout<<s3[m];
}
cout<<endl;
}
return 0;
}