给定n个十六进制正整数,输出它们对应的八进制数。 输入格式 输入的第一行为一个正整数n (1 #include using namespace std; void Traverse(string s,string &s2) //先转换为2进制 再转换为8进制 因为如果用10进制转换当输入的数较大时会溢出 { int i,k,j,num; //i j k为循环变量 string t,b; //t为存放一个16进制数的中间容器 b为存放二进制数容器 for(i=0;i='A'&&s[i]=0;j--) //将1位16进制数转换出来的二进制数加到b后 b+=t[j]; } t=""; for(j=b.size()-1;j>=2;j-=3) //将二进制转换成 8进制 { t+=(b[j]-48)*1+(b[j-1]-48)*2+(b[j-2]-48)*4+'0'; } if(j>=0) //最后要么补一位要么补两位0 { switch(j) { case 1:t+=(b[j]-48)*1+(b[j-1]-48)*2+'0';break; case 0:t+=(b[j]-48)*1+'0';break; } } k=t.size()-1; //消去前导0 if(t[k]=='0') k--; for(i=k;i>=0;i--) //逆序 s2+=t[i]; } int main(){ int n,i; string s1[10], s2[10]; cin>>n; for(i=0;i>s1[i]; Traverse(s1[i],s2[i]); } for(i=0;i