您的位置:首页 > 其它

十六进制快速转换八进制(算法核心可适用于2^n进制转化)

2015-03-28 15:02 429 查看
C++代码:

该算法就是在输入时候把2^4进制的数字转化为2进制, 之后开始截取2^3进制数字, 也就是每次截取3位数,再按照倍数转换为2^3进制, 输出即可

这个是百度百科中摘取的code, 大家千万要注意gets()和puts()的输入输出流, 对于刚刚入门C程序设计的同学, 千万记得gets()是不会读取’\n’,而是将’\n’存进输入流, 如果再跟一个getchar() 即可检验

编译环境: Sublime 2 + MinGW

#include<stdio.h>
#include<string.h>
#include<math.h>
#include <iostream>
using namespace std;

#define MAXsize 100000

void savebin(char *b,char *ch,int index)
{
b[index]=ch[0];  b[++index]=ch[1];  b[++index]=ch[2];  b[++index]=ch[3];
}

void hextobin(char *h,char *b)
{
char t[16][5]=
{
"0000","0001","0010","0011","0100","0101","0110","0111",   "1000","1001","1010","1011","1100","1101","1110","1111"
};
int i = 0;
for(;h[i]!='\0';i++)
{
switch(h[i])
{
case '0':{
savebin(b,t[0],i*4);
break;
}
case '1':
{
savebin(b,t[1],i*4);
break;
}
case '2':
{
savebin(b,t[2],i*4);
break;
}
case '3':
{
savebin(b,t[3],i*4);
break;
}
case '4':
{
savebin(b,t[4],i*4);
break;
}
case '5':
{
savebin(b,t[5],i*4);
break;
}
case '6':
{
savebin(b,t[6],i*4);
break;
}
case '7':
{
savebin(b,t[7],i*4);
break;
}
case '8':
{
savebin(b,t[8],i*4);
break;
}
case '9':
{
savebin(b,t[9],i*4);
break;
}
case 'A':
{
savebin(b, t[10], i * 4);
break;
}
case 'B':
{
savebin(b, t[11], i * 4);
break;
}
case 'C':
{
savebin(b, t[12], i * 4);
break;
}
case 'D':
{
savebin(b, t[13], i * 4);
break;
}
case 'E':
{
savebin(b, t[14], i * 4);
break;
}
case 'F':
{
savebin(b, t[15], i * 4);
break;
}
}
}
b[4 * i] = '\0';
}
void bintooct(char *b, char *o)
{
int i, j;
int bl, ol;
bl = strlen(b);
ol = ceil(bl / 3.0);
j = bl - 1;
i = ol - 1;
for(; i >= 0; --i, j -= 3)
{
if(i > 0)
{
o[i]=b[j]+(b[j-1]-48)*2+(b[j-2]-48)*4;
}
else
{
switch(j)
{
case 0:
{o[i]=b[j];
break;
}

case 1:{o[i]=b[j]+(b[j-1]-48)*2;
break;
}

case 2:{o[i]=b[j]+(b[j-1]-48)*2+(b[j-2]-48)*4;
break;
}

}
}
}
o[ol] = '\0';
}
{
int i = 0;
while(o[i]=='0')
{
++i;
}
printf("%s\n",&o[i]);
}

int main()
{
char h[MAXsize];
char b[MAXsize*4+1];
char o[MAXsize*4/3+1];
int i,n;

cin >> n;
getchar();
for(i=0;i<n;i++)
{
gets(h);
hextobin(h,b);
bintooct(b,o);
print(o);
}  return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐