思路:
先将十六进制转成十进制,再将十进制转成八进制
代码实现:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
//十六进制到十进制
int convert(char a[]){
int i,j=0,sum=0,n=strlen(a);
int num[100];
for(i=0;i<n;i++){
switch(a[i]){
case 'A':num[j++]=10;break;
case 'B':num[j++]=11;break;
case 'C':num[j++]=12;break;
case 'D':num[j++]=13;break;
case 'E':num[j++]=14;break;
case 'F':num[j++]=15;break;
default:num[j++]=a[i]-48;break;
}
}
for(i=n-1;i>=0;i--){
sum+=num[i]*pow(16,n-1-i);
}
return sum;
}
//十进制到八进制
int convert1(int n){
int k=0,p=0;
int m=n;
while(m){
k=k*10+m%8;
m=m/8;
}
do{
p=p*10+k%10;
k/=10;
}while(k>0);
return p;
}
int main(){
int n;
cin>>n;
int k=n;
int b[n],i=0;
char *a=new char[100000];
getchar();
while(k--){
gets(a);
b[i]=convert1(convert(a));i++;
}
for(i=0;i<n;i++)
cout<<b[i]<<endl;
return 0;
}