BASIC-12_蓝桥杯_十六进制转八进制
总结:
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;
}
最新文章
- 关于swfupload,客户端中文乱码解决方案!
- 最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind
- hdu 2999 Stone Game, Why are you always there? 博弈论
- MySQL Order By Rand()效率
- SqlServer CTE 递归查询 Oracle递归查询
- android入门——BroadCast(2)
- Linux环境下Android JNI程序的编译
- 关于MATLAB处理大数据坐标文件2017620
- DNS推荐
- Java加密算法
- 玩转Google
- 知识图谱实战开发案例剖析-番外篇(1)- Neo4j是否支持按照边权重加粗和大数量展示
- ubuntu 16.04 SS安装及配置
- Spring Boot 集成 Redis 实现缓存机制
- webstom 快捷键
- 无用之学matplotlib,numpy,pandas
- OpenJ_POJ C16D Extracurricular Sports 打表找规律
- Perl中的正则表达式(五)
- jquery实现行列的单向固定和列的拖拽
- Category 特性在 iOS 组件化中的应用与管控
热门文章
- SimpleXML php 解析xml 的方法
- 使用cocoa捕获dock栏中的“退出”事件,解决qt开发的应用程序退出异常的问题
- WinRAR 0day漏洞 附利用过程
- 多重条件判断SQL:用于用户名称,密码,权限的检测和判断
- Dll封装dll,并且调用该封装的dll
- <;div class=";clear";>;<;/div>;
- caffe编译问题-src/caffe/net.cpp:8:18: fatal error: hdf5.h: No such file or directory compilation terminated.
- opencv实现遍历文件夹下所有文件
- tesseract text2image windows
- CTF-练习平台-Misc之 猜?