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

Posted GetcharZp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于lqb 基础练习 十六进制转八进制 (字符串进行进制转化)的主要内容,如果未能解决你的问题,请参考以下文章

lqb 基础练习 特殊的数字

9-基础练习 十进制转十六进制

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

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

Java蓝桥杯基础练习

蓝桥杯 基础练习 BASIC-12 十六进制转八进制