基础练习 十六进制转换八进制

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 using namespace std;
 6 
 7 char str[100010];
 8 int a[5000000];
 9 
10 int main()
11 {
12     int i,k,j,n,l;
13     scanf("%d",&k);
14     while(k--)
15     {
16         scanf("%s",str);
17         l=strlen(str);
18         memset(a,0,sizeof(a));    j=0;
19         for(i=l-1;i>=0;i--)
20         {
21             if(str[i]=='A')
22             {
23                 a[j++]=0;a[j++]=1;a[j++]=0;a[j++]=1;
24             }
25             else 
26             if(str[i]=='B') {
27                 a[j++]=1;a[j++]=1;a[j++]=0;a[j++]=1;
28             } else 
29             if(str[i]=='C')
30             {
31                 a[j++]=0;a[j++]=0;a[j++]=1;a[j++]=1;
32             }    else 
33             if(str[i]=='D')    {
34                 a[j++]=1;a[j++]=0;a[j++]=1;a[j++]=1;
35             }    else 
36             if(str[i]=='E')
37             {
38                 a[j++]=0;a[j++]=1;a[j++]=1;a[j++]=1;
39             }
40             else 
41             if(str[i]=='F')
42             {
43                 a[j++]=1;a[j++]=1;a[j++]=1;a[j++]=1;
44             } else {
45                 n=str[i]-'0';
46                 int g=j;
47                 while(n)
48                 {
49                     a[j++]=n%2;
50                     n=n/2;
51                 }
52                 j=g+4;
53             }
54             
55         }
56         int e,d,h=0;
57         for(i=0;i<j;i+=3)
58         {
59             d=1;n=0;
60             for(e=i;e<i+3;++e){
61                 n+=a[e]*d;d*=2;
62             }
63             a[h++]=n;
64         }
65         for(i=h-1;i>=0;i--)
66         if(a[i]!=0) break;
67         for(j=i;j>=0;j--)
68         printf("%d",a[j]);
69         printf("
");
70     }
71     return 0;
72 }
View Code
原文地址:https://www.cnblogs.com/WDKER/p/5140781.html