第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
目录
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
前言
十六进制转八进制
C语言
C 语言
Java语言
Python语言
总结
前言
最近的一些文章都可能会很碎,写到哪里是哪里,过一阵子会具体的整理一遍,这里其它的类型题先往后排一排,因为蓝桥最后考的也就是对题目逻辑的理解能力,也就是dp分析能力了,所以就主要目标定在这里,最近的题目会很散,很多,基本上都是网罗全网的一些dp练习题进行二次训练,准备比赛的学生底子薄的先不建议看啊,当然,脑子快的例外,可以直接跳过之前的一切直接来看即可,只需要你在高中的时候数学成绩还可以那就没啥问题,其实,dp就是规律总结,我们只需要推导出对应题目的数学规律就可以直接操作,可能是一维数组,也可能是二维数组,总体来看二维数组的较多,但是如果能降为的话建议降为,因为如果降为起来你看看时间复杂度就知道咋回事了,那么在这里祝大家能无序的各种看明白,争取能帮助到大家。
十六进制转八进制
资源限制
内存限制:512.0MB C/C 时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】 输入的十六进制数不会有前导0,比如012A。 输出的八进制数也不能有前导0。
样例输入
2 39 123ABC
样例输出
71 4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
题解:
C语言
由于没有函数帮着处理只能自己写操作,超级麻烦。
代码语言:javascript复制#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 100000
void saveB(char *b,char c3,char c2,char c1,char c0,int start)
{
b[start]=c3;
b[start 1]=c2;
b[start 2]=c1;
b[start 3]=c0;
}
int htob(char *h,char *b)
{
int i,j;
int hl=strlen(h);
for(i=0;i<hl;i )
switch(h[i])
{
case '0':
{
saveB(b,'0','0','0','0',4*i);
break;
}
case '1':
{
saveB(b,'0','0','0','1',4*i);
break;
}
case '2':
{
saveB(b,'0','0','1','0',4*i);
break;
}
case '3':
{
saveB(b,'0','0','1','1',4*i);
break;
}
case '4':
{
saveB(b,'0','1','0','0',4*i);
break;
}
case '5':
{
saveB(b,'0','1','0','1',4*i);
break;
}
case '6':
{
saveB(b,'0','1','1','0',4*i);
break;
}
case '7':
{
saveB(b,'0','1','1','1',4*i);
break;
}
case '8':
{
saveB(b,'1','0','0','0',4*i);
break;
}
case '9':
{
saveB(b,'1','0','0','1',4*i);
break;
}
case 'A':
{
saveB(b,'1','0','1','0',4*i);
break;
}
case 'B':
{
saveB(b,'1','0','1','1',4*i);
break;
}
case 'C':
{
saveB(b,'1','1','0','0',4*i);
break;
}
case 'D':
{
saveB(b,'1','1','0','1',4*i);
break;
}
case 'E':
{
saveB(b,'1','1','1','0',4*i);
break;
}
case 'F':
{
saveB(b,'1','1','1','1',4*i);
break;
}
}
return 4*hl;
}
int btoo(char *b,char *o,int bl)
{
int i,j;
int ol;
int value;
if(bl%3==0)
ol=bl/3;
else
ol=bl/3 1;
j=bl-1;
for(i=ol-1;i>=0;i--)
{
if(i>0)
o[i]=b[j]-48 (b[j-1]-48)*2 (b[j-2]-48)*4 48;
else
{
switch(j)
{
case 2:
o[i]=b[j]-48 (b[j-1]-48)*2 (b[j-2]-48)*4 48;
break;
case 1:
o[i]=b[j]-48 (b[j-1]-48)*2 48;
break;
case 0:
o[i]=b[j];
break;
}
}
j=j-3;
}
return ol;
}
void printO(char *o,int ol)
{
int i=0;
if(o[0]=='0')
i=1;
for(;i<ol;i )
{
printf("%c",o[i]);
}
printf("n");
}
main()
{
char h[MaxSize];
char b[4*MaxSize];
char o[4*MaxSize/3 1];
int n,i,bl,ol;
scanf("%d",&n);
getchar();
for(i=0;i<n;i )
{
gets(h);
bl=htob(h,b);
ol=btoo(b,o,bl);
printO(o,ol);
}
}
C 语言
也是由于没有函数,所以非常麻烦。
代码语言:javascript复制#include <iostream>
#include <stdio.h>
#include <string.h>
#include <STDLIB.H>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int GetI(char c)
{
return c>>4&1?c&15:(c&15) 9;
}
int main(int argc, char *argv[]) {
char arr[200001] = {'