标签:style blog color io div sp 代码 log c
考虑到举一反三,这里顺便上完整代码,顺便可以考虑实现R进制和十进制的转换.
完整代码:
1 #include <stdio.h> 2 #include <math.h> 3 4 double 5 hexToDecimal(int); 6 7 double 8 octToDecimal(int); 9 10 double 11 toDecimal(int, int, int); 12 13 int 14 main(void) { 15 int a = 0x3c; 16 double r = hexToDecimal(a); 17 printf("%.f\n", r); 18 a = 017; 19 r = octToDecimal(a); 20 printf("%.f\n", r); 21 } 22 23 double 24 hexToDecimal(int hex) { 25 return toDecimal(hex, 15, 4); 26 } 27 double 28 octToDecimal(int oct){ 29 return toDecimal(oct, 7, 3); 30 } 31 32 33 double 34 toDecimal(int num, int base, int offset) { 35 int i = 0; //(b)的i次幂. 36 double r=0; //十进制结果. 37 double b= base + 1; //底数为b. 38 while(num) { 39 double t = (int)(num & base); 40 r += t * pow(b, i++); 41 num>>=offset; 42 } 43 44 return r; 45 }
该算法还是蛮简单,易懂的.例如十六进制的 3C,依次从右往左取数,通过&(与)15(4位1)可以得到C的二进制值的大小,为12.接下来就不用说了.很简单了.
标签:style blog color io div sp 代码 log c
原文地址:http://www.cnblogs.com/listened/p/3967548.html