C++面试题之进制转换的实例分享

—-想了解C++面试题之进制转换的实例分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

C++进制转换的实例

 一个面试题,要求输入十进制数,输出十六进制,可以使用printf打印%d,%c,%s来输出,但不能使用 %x 打印。

    写了两种算法,还算比较简洁,粘贴在此。        

  // 第一种算法,从低位到高位扫描移位,需要一个数组辅助倒序,一次性输出结果      #include <stdio.h>      #define MAX_HEX_NUM 16   #define OUT_DATA_LEN sizeof(int)*2 // 2个16进制数表示1个字节     static char Hex_Char_Table[MAX_HEX_NUM] = {     '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'   };      int ten2hex( int data )   {     char result[OUT_DATA_LEN+1];     int i,index;        result[OUT_DATA_LEN] = '';     for( i=OUT_DATA_LEN-1; i>=0; i-- )     {       index = data & 0xf;       result[i] = Hex_Char_Table[index];       data = data>>4;     }        printf("0x%sn",result);        return 0;   }   

    下面是第二种算法,从高位向低位扫描,得到结果直接打印。

  #include <stdio.h>      #define BITS_OF_INT  sizeof(int)*8 // int的位数   #define OUT_DATA_LEN sizeof(int)*2 // 2个16进制数表示1个字节      int printHex( int num )   {     int i;        printf("0x");     for(i=0;i<OUT_DATA_LEN;i++)     {       unsigned int res = num & 0xf0000000; //注意,必须用 unsigned int来接收,否则当输入负数的时候会转换错误       res = res >> (BITS_OF_INT-4);       char c;       if( res <= 9 )         c = res + '0';       else         c = 'A' + res - 10;          printf("%c",c);          num = num << 4;     }        printf("n");   }   

    两种算法其实都是采用移位的方式来运算,而不是采用除法,这样会更加高效一些,我想这个题目的考点应该也在这里吧。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/488600.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐