Code Bye

C语言 十六进制转八进制 运行出错

蓝桥杯基础练习 十六进制转八进制:
问题描述
给定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。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言 十六进制转八进制 运行出错