lqb 基础练习 十六进制转八进制 (字符串进行进制转化)

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

时间限制:1.0s   内存限制:512.0MB
   
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式
  输出n行,每行为输入对应的八进制正整数。

  【注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

  提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。
 
分析:
  将输入的十六进制转化为对应的二进制,
  再将二进制转化为对应的八进制就简单多了
 
PS:
  十六进制输入输出%x(字母部分用小写) 或者 %X(字母部分用大写)
  八进制输入输出 %o
  十进制输入输出 %d.
  (备注:用于这道题数据量较大不能使用简单的数据类型转化解决所有的数据)
 
C/C++代码实现(AC):
  
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <stack>
 7 #include <map>
 8 #include <queue>
 9 
10 using namespace std;
11 
12 int main()
13 {
14     int n;
15     scanf("%d", &n);
16     while(n --)
17     {
18         string str1, str2;
19         cin >>str1;
20         int len = str1.size();
21         for (int i=0; i<len; ++i) {
22             if (str1[i] == '0') str2 += "0000";
23             else if (str1[i] == '1') str2 += "0001";
24             else if (str1[i] == '2') str2 += "0010";
25             else if (str1[i] == '3') str2 += "0011";
26             else if (str1[i] == '4') str2 += "0100";
27             else if (str1[i] == '5') str2 += "0101";
28             else if (str1[i] == '6') str2 += "0110";
29             else if (str1[i] == '7') str2 += "0111";
30             else if (str1[i] == '8') str2 += "1000";
31             else if (str1[i] == '9') str2 += "1001";
32             else if (str1[i] == 'A') str2 += "1010";
33             else if (str1[i] == 'B') str2 += "1011";
34             else if (str1[i] == 'C') str2 += "1100";
35             else if (str1[i] == 'D') str2 += "1101";
36             else if (str1[i] == 'E') str2 += "1110";
37             else if (str1[i] == 'F') str2 += "1111";
38         }
39 
40         int len_ = str2.size();
41         if (len_ % 3 == 1) str2 = "00" + str2;
42         if (len_ % 3 == 2) str2 = "0" +str2;
43 
44         int len_now = str2.size(), flag = 0, temp;
45         for (int i = 0; i < len_now; i += 3)
46         {
47             temp = int(str2[i] - '0') * 4 + int(str2[i + 1] - '0') * 2
48                    + int(str2[i + 2] - '0');
49             if (temp) flag = 1;
50             if (flag) printf("%d", temp);
51         }
52         printf("\n");
53     }
54     return 0;
55 }

 

posted @ 2018-05-13 22:10  GetcharZp  阅读(340)  评论(0编辑  收藏  举报