1. 程式人生 > >十六進制轉八進制

十六進制轉八進制

col ase 十六 using AC div include urn 初始

 1 #include <iostream>  
 2 #include <string>  
 3 using namespace std;  
 4   
 5 int main()  
 6 {  
 7     int n;  
 8     cin>>n;  
 9     for(int k=1;k<=n;k++)  
10     {  
11         string s1,s2;//s1為輸入的原始的十六進制串,s2為轉化成的二進制串  
12         cin>>s1;  
13         s2="";//初始化  
14 for(int i=0;i<s1.length();i++)//遍歷,字符串上加上每一位 15 { 16 switch(s1[i]) 17 { 18 case 0:s2+="0000";break; 19 case 1:s2+="0001";break; 20 case 2:s2+="0010";break; 21 case 3:s2+="0011";break;
22 case 4:s2+="0100";break; 23 case 5:s2+="0101";break; 24 case 6:s2+="0110";break; 25 case 7:s2+="0111";break; 26 case 8:s2+="1000";break; 27 case 9:s2+="1001";break; 28 case
A:s2+="1010";break; 29 case B:s2+="1011";break; 30 case C:s2+="1100";break; 31 case D:s2+="1101";break; 32 case E:s2+="1110";break; 33 case F:s2+="1111";break; 34 default:break; 35 } 36 } 37 int len=s2.length(); 38 39 if(len%3==1)//三個二進制為一位八進制,二進制串前面補0,確保二進制串的長度為3的倍數 40 s2="00"+s2; 41 else if(len%3==2) 42 s2="0"+s2; 43 int flag=0; 44 for(int i=0;i<=s2.length()-3;i+=3) 45 { 46 int num=4*(s2[i]-0)+2*(s2[i+1]-0)+(s2[i+2]-0); 47 if(num) 48 flag=1;//忽略前導0 49 if(flag) 50 cout<<num; 51 } 52 cout<<endl; 53 } 54 return 0; 55 }

這道題的精髓就在於通過二進制做橋梁,這樣可以減少時間。

十六進制轉八進制