您的位置:首页 > 其它

十六进制转八进制

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

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

//********************十六进制转八进制
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: