16进制转换为2进制逆和8进制正
主要思想是将16进制转为2进制逆序,然后对2进制逆序进行正序3位1整合,成为8进制。其中设大数组全为零有利于二进制转八进制
#include<iostream>
#include<string>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
string b;
int b2[40002]={0};
int a[10];
cin>>b;
int l=b.length();
for(int j=0;j<l;j++)
{
int d=0;
if(isupper(b[l-j-1])){
d=b[l-j-1]-'A'+10;
// cout<<"b[l-j-1]="<<b[l-j-1]<<endl;
}
else{
d=b[l-j-1]-48;
// cout<<"b[数字]="<<b[l-j-1]<<endl;
}
// cout<<b[l-j-1]<<"d="<<d<<endl;
for(int k=3;k>=0;k--)
{
// cout<<pow(2,k)<<endl;
b2[j*4+k]=d/(pow(2,k));
if(d>=pow(2,k))d=d-pow(2,k);
}
}
cout<<"(2进制逆):";
for(int j=0;j<=4*l-1;j++)cout<<b2[j];
int b1=0;
for(int j=0;j<=4*l-1;j+=3,b1++){
int sum=0;
for(int k=0;k<3;k++){
sum+=b2[k+j]*pow(2,k);
}
b2[b1]=sum;
}
cout<<endl<<"(8进制):";
for(int j=b1-1;j>=0;j--)cout<<b2[j];
cout<<endl;
//int aa[5]={0};
//for(int da=0;da<5;da++)cout<<aa[da];
}
return 0;
}