十六进制转八进制
2015-04-01 14:50
10 查看
问题描述:给定 n 个十六进制正整数,输出它们对应的八进制数。
输入格式:输入的第一行为一个正整数 n (1<=n<=10) 。接下来 n 行,每行一个由 0~9、大写字母
A~F 组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过 100000。
输出格式:输出 n 行,每行为输入对应的八进制正整数。
注意:输入的十六进制数不会有前导 0,比如 012A。输出的八进制数也不能有前导 0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示:先将十六进制数转换成某进制数,再由某进制数转换成八进制。
输入格式:输入的第一行为一个正整数 n (1<=n<=10) 。接下来 n 行,每行一个由 0~9、大写字母
A~F 组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过 100000。
输出格式:输出 n 行,每行为输入对应的八进制正整数。
注意:输入的十六进制数不会有前导 0,比如 012A。输出的八进制数也不能有前导 0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示:先将十六进制数转换成某进制数,再由某进制数转换成八进制。
//********************十六进制转八进制 #include <iostream> #include <string.h> using namespace std; const int Max = 100001; void init_binary(char *hex,char c4,char c3,char c2,char c1,int start) { hex[start]=c4; hex[start+1]=c3; hex[start+2]=c2; hex[start+3]=c1; } int create_binary(char *c,char *hex) { int i,j; int c_count=strlen(c); for(i=0;i<c_count;i++) switch(c[i]) { case '0':{init_binary(hex,'0','0','0','0',4*i);break;} case '1':{init_binary(hex,'0','0','0','1',4*i);break;} case '2':{init_binary(hex,'0','0','1','0',4*i);break;} case '3':{init_binary(hex,'0','0','1','1',4*i);break;} case '4':{init_binary(hex,'0','1','0','0',4*i);break;} case '5':{init_binary(hex,'0','1','0','1',4*i);break;} case '6':{init_binary(hex,'0','1','1','0',4*i);break;} case '7':{init_binary(hex,'0','1','1','1',4*i);break;} case '8':{init_binary(hex,'1','0','0','0',4*i);break;} case '9':{init_binary(hex,'1','0','0','1',4*i);break;} case 'A':{init_binary(hex,'1','0','1','0',4*i);break;} case 'B':{init_binary(hex,'1','0','1','1',4*i);break;} case 'C':{init_binary(hex,'1','1','0','0',4*i);break;} case 'D':{init_binary(hex,'1','1','0','1',4*i);break;} case 'E':{init_binary(hex,'1','1','1','0',4*i);break;} case 'F':{init_binary(hex,'1','1','1','1',4*i);break;} } return 4*c_count; } int create_octonary(char *hex,char *oct,int hex_count) { int oct_count; if(hex_count%3==0) oct_count=hex_count/3; else oct_count=hex_count/3+1; for(int i=oct_count-1,j=hex_count-1;i>=0;i--,j=j-3) { if(i>0) oct[i]=(hex[j]-48)+(hex[j-1]-48)*2+(hex[j-2]-48)*4+48; else switch(j) { case 2:oct[i]=(hex[j]-48)+(hex[j-1]-48)*2+(hex[j-2]-48)*4+48; break; case 1:oct[i]=(hex[j]-48)+(hex[j-1]-48)*2+48; break; case 0:oct[i]=hex[j]; break; } } return oct_count; } void show_out(char *oct,int oct_count) { for(int i=0;i<oct_count;i++) { if(i==0&&oct[i]=='0') continue; cout << oct[i]; } } int main() { int n,hex_count,oct_count; cin >> n; char *c ,hex[4*Max],oct[4*Max/3+1]; for(int i=0;i<n;i++) { c[i]=new char[Max]; cin >> c[i]; } for(int i=0;i<n;i++) { hex_count=create_binary(c[i],hex); oct_count=create_octonary(hex,oct,hex_count); show_out(oct,oct_count); if(i!=n-1) cout << endl; } return 0; }
相关文章推荐
- 进制转换(二进制、八进制、十进制与十六进制之间的相互转换)
- 二进制,八进制,十进制,十六进制之间的转换.以及二进制转十进制8421
- 十六进制转八进制
- C++ cout利用控制符dec、hex和oct,分别输出十进制、十六进制和八进制显示整数
- java中进行二进制,八进制,十六进制,十进制间进行相互转换
- 十六进制之间的转换(二进制、八进制、十六进制、十进制)
- 蓝桥杯基础训练 十六进制转八进制
- 蓝桥杯 基础练习 十六进制转八进制
- 【蓝桥杯】【基础练习02】【十六进制转八进制】
- 十进制负数转换为二进制、八进制、十六进制
- Problem A: 将十进制数对应的八进制、十六进制、十进制数输出
- linux shell 不同进制数据转换(二进制,八进制,十六进制,base64)
- 二进制、八进制、十进制、十六进制之间转换
- 二进制 十进制 八进制 十六进制
- 二进制、八进制、十进制和十六进制之间的转换
- 八进制与十六进制
- 蓝桥杯BASIC-12(十六进制转八进制)
- 08 八进制和十六进制
- 基础练习 十六进制转八进制
- 进制转换:二进制、八进制、十六进制、十进制之间的转换