十六进制转八进制 蓝桥

    xiaoxiao2021-03-25  159

    问题描述   给定n个十六进制正整数,输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n (1<=n<=10)。   接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式   输出n行,每行为输入对应的八进制正整数。    【注意   输入的十六进制数不会有前导0,比如012A。   输出的八进制数也不能有前导0。 样例输入   2   39   123ABC 样例输出   71   4435274    提示

      先将十六进制数转换成某进制数,再由某进制数转换成八进制。

    #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?

    转载请注明原文地址: https://ju.6miu.com/read-7677.html

    最新回复(0)