十六进制快速转换八进制(算法核心可适用于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
该算法就是在输入时候把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; }
相关文章推荐
- 算法第二弹:十六进制转换成十进制
- Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)
- PHP实现各进制间的转换 十进制与二进制、八进制、十六进制间的互换
- Java进制转换之十六进制转八进制
- 十六进制(2^n进制)转换十进制(非2^n进制)快速算法
- 计算机进制转换:二进制、八进制、十进制、十六进制互转
- C#各种进制之间数据转换二进制、八进制、十进制、十六进制
- 【ACM之旅】进制转换4 (十六进制转八进制)
- 进制间的转换(二进制、八进制、十六进制、十进制)
- java程序中的进制(进制的转换十六进制和八进制)
- 算法:十进制转换为十六进制,二进制,八进制
- Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
- Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)
- YYMMDD转换成4位字符压缩表示算法java实现——应用各位不等进制的思想
- WebServer实现SQL数据库百度坐标转换转化的算法
- 十六进制字符串转换成十进制整数的C++实现源代码
- 设计算法把一个十进制的整数转换成二至九进制之间的任意进制输出
- 二进制、八进制、十进制、十六进制之间转换
- C语言中字符串如何转换为二进制、八进制、十进制、十六进制
- java中进行二进制,八进制,十六进制,十进制间进行相互转换