首页 > 其他 > 详细

十六进制转八进制

时间:2018-03-31 17:21:55      阅读:175      评论:0      收藏:0      [点我收藏+]
 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 }  

这道题的精髓就在于通过二进制做桥梁,这样可以减少时间。

十六进制转八进制

原文:https://www.cnblogs.com/hcd-dyh/p/8682955.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!