zoukankan      html  css  js  c++  java
  • 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("
    ");
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    阿凯
    hlg神秘植物--矩阵快速幂
    poj1185炮兵阵地--状态dp
    该怎么办
    hlg2096---状态压缩dp
    这个世界

    第三篇
    LCT板子
    spoj COT
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9033654.html
Copyright © 2011-2022 走看看