十六进制转八进制


#include<iostream> 
#include<cstring> 
using namespace std;
 int main() 
 { string s1,s2;//s1存输入的十六进制,s2存二进制 
  int n; int i,j,k;
   cin>>n; 
   for(i=0;i<n;i++) 
   { cin>>s1; s2="";//对s2初始化 
    for(j=0;j<s1.length();j++) 
	{ switch(s1[j])
	 {    case '0':s2+="0000";break;
	      case '1':s2+="0001";break;
	      case '2':s2+="0010";break; 
	      case '3':s2+="0011";break;
	      case '4':s2+="0100";break; 
	      case '5':s2+="0101";break; 
	  	  case '6':s2+="0110";break; 
	 	  case '7':s2+="0111";break; 
		  case '8':s2+="1000";break;
		  case '9':s2+="1001";break;
		  case 'A':s2+="1010";break; 
		  case 'B':s2+="1011";break; 
		  case 'C':s2+="1100";break; 
		  case 'D':s2+="1101";break; 
		  case 'E':s2+="1110";break; 
		  case 'F':s2+="1111";break; 
		  default:break; }
	 } 
		  if(s2.length()%3==1) 
		  s2="00"+s2; 
		  if(s2.length()%3==2) 
		  s2="0"+s2; 
		  int flag=0; 
		  for(k=0;k<s2.length()-2;k+=3) 
		  { int p=4*(s2[k]-'0')+2*(s2[k+1]-'0')+s2[k+2]-'0'; 
		  if(p) flag=1; //去掉前导,而且如果后面有0,那么前面已经使得 flag=1,所以能够输出 
		  if(flag) cout<<p; //如果只有 if(p) cout<<p;那么后面有0就输不出 
		  } 
		  cout<<endl;
  }
 return 0;
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值