首页 > 分享 > 蓝桥杯 基础训练—十六进制转八进制 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度

蓝桥杯 基础训练—十六进制转八进制 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度

伏城无嗔 于 2020-10-15 18:59:56 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

问题描述

给定n个十六进制正整数,输出它们对应的八进制数。

输入格式

输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

输出n行,每行为输入对应的八进制正整数。

注意

输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入

2
39
123ABC

样例输出

71
4435274

提示

先将十六进制数转换成某进制数,再由某进制数转换成八进制。

思路

先将16进制数转换成2进制数,再转换成8进制数。

代码:

#include<stdio.h> #include<string.h> char h[100002],b[400002],e[400002]; int main(){ int n; scanf("%d",&n); while(n--){ scanf("%s",h); int i,len=0; /*先把16进制化成二进制——从后往前展开 */ for(i=strlen(h)-1;i>=0;i--){ int v; if(h[i]>='0' && h[i]<='9') v=h[i]-'0'; else v=h[i]-'A'+10; for(int j=0;j<4;j++){ b[len++]=v%2+'0'; v/=2; } } b[len]=''; int x=0,cnt=1; int l=0; for(i=0;i<len;i++){ /*每三位二进制转成一位8进制,最后不足三位补0*/ if(cnt==4||i==len-1){ x=cnt*(b[i]-'0')+x; cnt=1; e[l++]=x+'0'; x=0; } else{ x=cnt*(b[i]-'0')+x; cnt*=2; } } i=l-1; while(i>=0 && e[i]=='0') /*去掉前导0*/ i--; if(i<0) printf("0"); for (;i>=0;i--){ printf("%c",e[i]); } printf("n"); } return 0; } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849

相关知识

1.字符串详解
C语言编程:求水仙花数。输入一个正整数n,计算n位水仙花数。
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。
linux shell 正则表达式(BREs,EREs,PREs)差异比较
蓝桥杯【第13届省赛】Python 实现
玫瑰花数 一个四位数等于各位数字的四次方之和,则为玫瑰花数。如:1634=1*1*1*1+6*6*6*6+3*3*3*3+4*4*4*4
C语言字符串转数字的5种方法(附带示例)
PTA所谓水仙花数是指一个m位数 输入一个3位数n,输出所有介于100至n之间的位数为3的水仙花数 求1到正整数n之间的偶数之和,输出结果后换行。
n位水仙花数
【2018暑假集训模拟一】Day2题解

网址: 蓝桥杯 基础训练—十六进制转八进制 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度 https://m.huajiangbk.com/newsview854856.html

所属分类:花卉
上一篇: 2024年端午节大连旅游攻略
下一篇: 4.10 练习