先将十六进制数转换成某进制数,再由某进制数转换成八进制。
#include<iostream> #include<cstring> #include<vector> using namespace std; string getcount(string str){ string result; for(int i=0;str[i]!='\0';++i){ switch(str[i]){ case '0':result+="0000";break; case '1':result+="0001";break; case '2':result+="0010";break; case '3':result+="0011";break; case '4':result+="0100";break; case '5':result+="0101";break; case '6':result+="0110";break; case '7':result+="0111";break; case '8':result+="1000";break; case '9':result+="1001";break; case 'A':result+="1010";break; case 'B':result+="1011";break; case 'C':result+="1100";break; case 'D':result+="1101";break; case 'E':result+="1110";break; case 'F':result+="1111";break; default:break; } } return result; } void print(string number){ vector<int> v; string n=number; for(int i=n.length()-1;i>=0;){ int count=0; int ii=i; for(int j=0;j<3;j++){ if(i<0)continue; if(n[ii-2+j]=='1'){ count=count*2+1; }else{ count=count*2; } --i; } v.push_back(count); } for(int i=0;i<v.size();++i){ if(i==0){ if(v[v.size()-1-i]==0){ continue; } } cout<<v[v.size()-1-i]; } cout<<endl; } int main(){ string str[10]; int n; cin>>n; for(int i=0;i<n;++i){ cin>>str[i]; } for(int i=0;i<n;++i){ print(getcount(str[i])); } return 0; } 结果:测试数据是对的,但是提交不通过,求解why?