总结:

1.使用库函数可有效节省空间,但时间花费较多;

2.由于本题的输入数据较大,又限制时间,故要注意利用空间换时间;

3.使用顺序结构换取最小运行时间;

示例代码:

#include <stdio.h>
#include <string.h>
#define N1 100000 /*16进制*/
#define N2 400008 /*2进制*/

int main(void)
{
  int n = 0 ;
  int i = 0 , j = 0 , k = 0 , len = 0;
  int flag = 0 , sum = 0 ;
  char arr[N1] , num[N2];
  scanf("%d",&n);

  for (i = 0 ; i < n ; i ++)
  {
    memset(num,'\0',N2);
    scanf("%s",&arr);
    len = strlen(arr);
    k = 0;
    /*
      16进制转2进制,再转8进制,不足3的倍数补0

    */
    if (len%3 == 1)
    {    
      num[0] = num[1] = '0' ;
      k += 2;
    }
    else if (len%3 == 2)
    {
      num[0] = '0';
      k += 1;
    }

    for (j = 0 ; j < len ; j ++ , k += 4)
    {
      switch(arr[j])
      {
        case '0' : num[k]='0',num[k+1]='0',num[k+2]='0',num[k+3]='0';break;
        case '1' : num[k]='0',num[k+1]='0',num[k+2]='0',num[k+3]='1';break;
        case '2' : num[k]='0',num[k+1]='0',num[k+2]='1',num[k+3]='0';break;
        case '3' : num[k]='0',num[k+1]='0',num[k+2]='1',num[k+3]='1';break;
        case '4' : num[k]='0',num[k+1]='1',num[k+2]='0',num[k+3]='0';break;
        case '5' : num[k]='0',num[k+1]='1',num[k+2]='0',num[k+3]='1';break;
        case '6' : num[k]='0',num[k+1]='1',num[k+2]='1',num[k+3]='0';break;
        case '7' : num[k]='0',num[k+1]='1',num[k+2]='1',num[k+3]='1';break;
        case '8' : num[k]='1',num[k+1]='0',num[k+2]='0',num[k+3]='0';break;
        case '9' : num[k]='1',num[k+1]='0',num[k+2]='0',num[k+3]='1';break;
        case 'A' : num[k]='1',num[k+1]='0',num[k+2]='1',num[k+3]='0';break;
        case 'B' : num[k]='1',num[k+1]='0',num[k+2]='1',num[k+3]='1';break;
        case 'C' : num[k]='1',num[k+1]='1',num[k+2]='0',num[k+3]='0';break;
        case 'D' : num[k]='1',num[k+1]='1',num[k+2]='0',num[k+3]='1';break;
        case 'E' : num[k]='1',num[k+1]='1',num[k+2]='1',num[k+3]='0';break;
        case 'F' : num[k]='1',num[k+1]='1',num[k+2]='1',num[k+3]='1';break;
        default:break;
      }
    }

    for (j = 0 , flag = 0; j < k ; j += 3)
    {
      if (num[j+0] == '0' && num[j+1] == '0' && num[j+2] == '0')
        sum = 0;
      else if (num[j+0] == '0' && num[j+1] == '0' && num[j+2] == '1')
        sum = 1;
      else if (num[j+0] == '0' && num[j+1] == '1' && num[j+2] == '0')
        sum = 2;
      else if (num[j+0] == '0' && num[j+1] == '1' && num[j+2] == '1')
        sum = 3;
      else if (num[j+0] == '1' && num[j+1] == '0' && num[j+2] == '0')
        sum = 4;
      else if (num[j+0] == '1' && num[j+1] == '0' && num[j+2] == '1')
        sum = 5;
      else if (num[j+0] == '1' && num[j+1] == '1' && num[j+2] == '0')
        sum = 6;
      else if (num[j+0] == '1' && num[j+1] == '1' && num[j+2] == '1')
        sum = 7;

      /*当为000时省略*/
      if (sum)
      {
        flag = 1;
      }
      if (flag)
      {
        printf("%d",sum);
      }
    }
    printf("\n");
  }

  return 0;
}

BASIC-12_蓝桥杯_十六进制转八进制的更多相关文章

  1. BASIC-11_蓝桥杯_十六进制转十进制

    注意事项: 1.长数据注意选择long long类型,用%ldd输出,防止数据溢出; 示例代码: #include <stdio.h>#include <string.h>#i ...

  2. BASIC-10_蓝桥杯_十进制转十六进制

    示例代码: #include <stdio.h>#define N 16 void dg(int a){ int y = a%N; int next = (a-y)/N; if (next ...

  3. 蓝桥杯_算法训练_ALGO10_集合运算

    这个题实际上思路是比较简单的,但是需要注意细节问题. 思路:读入数组之后进行排序,然后再求交.并.补集. 首先排序:(使用的是冒泡排序) #include<iostream> using ...

  4. 蓝桥杯_算法训练_Torry的困惑(基本型)

    这个题目就是求质数的乘积,在加一个模,思路比较简单,直接上代码: #include<iostream> using namespace std; bool isPrime(int a) { ...

  5. 蓝桥杯_算法训练_区间k大数查询

    问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...

  6. ALGO-43_蓝桥杯_算法训练_A+B Problem

    问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...

  7. ALGO-39_蓝桥杯_算法训练_数组排序去重

    问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 多行输出,每行一个元素. 样例输入 样例输出 解题思路: 若输入的数字存在数组中,剔除,否 ...

  8. ALGO-115_蓝桥杯_算法训练_和为T(枚举)

    问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...

  9. ALGO-117_蓝桥杯_算法训练_友好数

    问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:+= 4的约数和有:+= 所以9和4不是友好的. 220的约数和有: = 284的约 ...

随机推荐

  1. 快速切题 hdu2416 Treasure of the Chimp Island 搜索 解题报告

    Treasure of the Chimp Island Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  2. [置顶]使用scrapy_redis,自动实时增量更新东方头条网全站新闻

    存储使用mysql,增量更新东方头条全站新闻的标题 新闻简介 发布时间 新闻的每一页的内容 以及新闻内的所有图片.项目文件结构. 这是run.py的内容 1 #coding=utf-8 2 from ...

  3. 《Python》 函数进阶和名称空间作用域

    函数进阶: 一.动态参数:*args  **kwargs *args是元祖形式,接收除去键值对以外的所有参数 # args可以换成任意变量名,约定俗成用args **kwargs接收的只是键值对的参数 ...

  4. Triangles 正多边形分割锐角三角形

    题目描述 已知一个圆的圆周被N个点分成了N段等长圆弧,求任意取三个点,组成锐角三角形的个数. 输入 多组数据,每组数据一个N(N <= 1000000) 输出 对于每组数据,输出不同锐角三角形的 ...

  5. anu - react

    import { options } from "./util"; import { Children } from "./Children"; import ...

  6. MAC中安卓开发环境的下载

    今天终于为我的Macbook Pro Retina搭建好了Android开发环境,几经折磨,差点放弃了: 总结如下:1.最好选择ADT Bundle,这里面已经集成好了Eclipse.ADT.Andr ...

  7. react 部分ES6写法

    react+react-router+antd 栗子:https://github.com/Aquarius1993/reactApp 模块: 1. 引入模块 import React from 'r ...

  8. matplotlib.pyplot中add_subplot方法参数111的含义

    下述代码若要运行,得在安装Python之外安装matplotlib.numpy.scipy.six等库,专门来看这篇小贴的朋友应该知道这些库. 参数331的意思是:将画布分割成3行3列,图像画在从左到 ...

  9. C高级第一次PTA作业

    作业要求一 附加题目 写程序证明P++等价于(p)++还是等价于*(p++)? 1.设计思路: (1).题目算法描述 第一步:定义变量p并赋初值 第二步:分三次计算每次分别输出 p++,(p)++,* ...

  10. 【计算机视觉】如何使用opencv自带工具训练人脸检测分类器

    前言 使用opencv自带的分类器效果并不是很好,由此想要训练自己的分类器,正好opencv有自带的工具进行训练.本文就对此进行展开. 步骤 1.查找工具文件: 2.准备样本数据: 3.训练分类器: ...