【蓝桥杯】 基础练习 十六进制转八进制
2014-11-13 19:51
302 查看
基础练习 十六进制转八进制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
时间限制:1.0s 内存限制:512.0MB
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
#include<cstdio> #include<cstring> using namespace std; const int maxn=100000+10; char h[maxn],b[4*maxn],e[4*maxn]; int main() { int n; scanf("%d",&n); while(n--) { scanf("%s",h); int len=0; for(int i=strlen(h)-1;i>=0;i--)//十六转二 { int x; if(h[i]>='0'&&h[i]<='9') x=h[i]-'0'; else { x=h[i]-'A'+10; } for(int j=0;j<4;j++) { e[len++]=x%2+'0'; x/=2; } } e[len]='\0'; int cnt=1,x=0,l=0; for(int i=0;i<len;i++)//二转八 { if(cnt==4||i==len-1) { x+=cnt*(e[i]-'0'); cnt=1; b[l++]=x+'0'; x=0; } else { x+=cnt*(e[i]-'0'); cnt*=2; } } int i=l-1; while(i>=0&&b[i]=='0')//去前导0 i--; if(i<0) printf("0\n"); for(;i>=0;i--) { printf("%c",b[i]); } printf("\n"); } return 0; }
相关文章推荐
- 蓝桥杯-- 基础练习 十六进制转八进制(大数操作)
- 蓝桥杯-基础练习-十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- [蓝桥杯练习系统]基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯-基础练习12 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯试题集 基础练习 十六进制转八进制
- 蓝桥杯-基础练习 十六进制转八进制
- 【蓝桥杯】【基础练习02】【十六进制转八进制】
- 蓝桥杯-基础练习-十六进制转八进制(被超时了!!!)
- "蓝桥杯“基础练习:十六进制转八进制
- 蓝桥杯基础练习——十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制 【字符串处理】
- "蓝桥杯“基础练习:十六进制转八进制
- 蓝桥杯 【基础练习】 十六进制转八进制
- 蓝桥杯:基础练习 十六进制转八进制
- 【蓝桥杯】基础练习 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 蓝桥杯-基础练习-BASIC-12-十六进制转八进制