蓝桥杯基础练习 十六进制转八进制:
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,例如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,例如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
#include <stdio.h>
#include<string.h>
#define MAXSIZE 10
int main(){
char data[]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
int len, i, j, k, m, n, t, y, b;
//十六进制转换成十进制
long z=0;
int x[MAXSIZE]={0};
char input[MAXSIZE];
scanf("%d",&y);
for(b=0; b<y; b++){
scanf("%s", &input);
len=strlen(input);
for(i=0;i<len;i++){
for(k=0;k<16;k++){
if(input[i] == data[k]){
m=k;
break;
}
}
for(j=0;j<len-i-1;j++){
m*=16;
}
z+=m;
}
//十进制转换成八进制
t = 0;
while(z>=8){
n = z%8;
z /=8;
for(i=0; i<t; i++){
n *=10;
}
x[b] +=n;
t++;
}
for(j=0; j<t; j++){
z *=10;
}
x[b] +=z;
z=0;
}
for(i=0; i<y; i++){
printf("%d\n",x[i]);
}
return 0;
}
本人本人运行出来是正确的,但上传到蓝桥杯的练习系统上之后,就显示“运行出错”,找了好久没找到原因,望高手们相助
解决方案
20
每个十六进制数长度不超过100000。你的长度只能为10。