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