输出的八进制数也不能有前导0。
样例输入 2 39 123ABC 样例输出 714435274
把39转成二进制:00111001
再把该二进制转成八进制:
000,111,001=071
我把不足3位的补成了000,再把071的前导0去掉
代码:
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<map> using namespace std; map<char,int>mp; char str16[100005]; int str2[400005],str8[400005]; int main() { //freopen("F:\浏览器下载\input1.txt", "r", stdin); //freopen("out.txt", "w", stdout); int t,i,j,k,m; int f[4]={1,2,4}; mp['A']=10;mp['B']=11;mp['C']=12;mp['D']=13;mp['E']=14;mp['F']=15; for(i=0;i<=9;i++) mp[i+'0']=i; cin>>t; while(t--){ k=0; cin>>str16; for(i=strlen(str16)-1;i>=0;i--){ m=mp[str16[i]]; //cout<<m<<endl; for(j=0;j<4;j++){ str2[k]=m%2; m/=2; k++; } } m=0;int p=0; while(k%3!=0){ str2[k++]=0; //cout<<"k="<<k<<endl; } /*for(i=k-1;i>=0;i--)cout<<str2[i]; cout<<endl;*/ for(i=0,j=0;i<k;i++){ m+=str2[i]*f[j]; //cout<<str2[i]<<" "<<f[j]<<endl; j++; if(j==3){ j=0; str8[p++]=m; //cout<<"m="<<m<<endl; m=0; } } //cout<<"p="<<p<<endl; //cout<<str8[p-1]<<endl; m=0; for(i=p-1;i>=0;i--){ if(str8[i]==0) m++; else break; } for(i=p-1-m;i>=0;i--) cout<<str8[i]; cout<<endl; } return 0; }
