首页 > 代码库 > 【蓝桥杯】 基础练习 十六进制转八进制
【蓝桥杯】 基础练习 十六进制转八进制
基础练习 十六进制转八进制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
39
123ABC
样例输出
71
4435274
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int maxn=100000+10; 5 char h[maxn],b[4*maxn],e[4*maxn]; 6 int main() 7 { 8 int n; 9 scanf("%d",&n);10 while(n--)11 {12 scanf("%s",h);13 int len=0;14 for(int i=strlen(h)-1;i>=0;i--)//十六转二15 {16 int x;17 if(h[i]>=‘0‘&&h[i]<=‘9‘)18 x=h[i]-‘0‘;19 else20 {21 x=h[i]-‘A‘+10;22 }23 for(int j=0;j<4;j++)24 {25 e[len++]=x%2+‘0‘;26 x/=2;27 }28 }29 e[len]=‘\0‘;30 int cnt=1,x=0,l=0;31 for(int i=0;i<len;i++)//二转八32 {33 if(cnt==4||i==len-1)34 {35 x+=cnt*(e[i]-‘0‘);36 cnt=1;37 b[l++]=x+‘0‘;38 x=0;39 }40 else41 {42 x+=cnt*(e[i]-‘0‘);43 cnt*=2;44 }45 }46 int i=l-1;47 while(i>=0&&b[i]==‘0‘)//去前导048 i--;49 if(i<0)50 printf("0\n");51 for(;i>=0;i--)52 {53 printf("%c",b[i]);54 }55 printf("\n");56 }57 return 0;58 }
【蓝桥杯】 基础练习 十六进制转八进制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。