C++面试题之进制转换的实例
C++进制转换的实例
一个面试题,要求输入十进制数,输出十六进制,可以使用printf打印%d,%c,%s来输出,但不能使用%x打印。
写了两种算法,还算比较简洁,粘贴在此。
//第一种算法,从低位到高位扫描移位,需要一个数组辅助倒序,一次性输出结果 #include#defineMAX_HEX_NUM16 #defineOUT_DATA_LENsizeof(int)*2//2个16进制数表示1个字节 staticcharHex_Char_Table[MAX_HEX_NUM]={ '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; intten2hex(intdata) { charresult[OUT_DATA_LEN+1]; inti,index; result[OUT_DATA_LEN]='\0'; for(i=OUT_DATA_LEN-1;i>=0;i--) { index=data&0xf; result[i]=Hex_Char_Table[index]; data=data>>4; } printf("0x%s\n",result); return0; }
下面是第二种算法,从高位向低位扫描,得到结果直接打印。
#include#defineBITS_OF_INTsizeof(int)*8//int的位数 #defineOUT_DATA_LENsizeof(int)*2//2个16进制数表示1个字节 intprintHex(intnum) { inti; printf("0x"); for(i=0;i >(BITS_OF_INT-4); charc; if(res<=9) c=res+'0'; else c='A'+res-10; printf("%c",c); num=num<<4; } printf("\n"); }
两种算法其实都是采用移位的方式来运算,而不是采用除法,这样会更加高效一些,我想这个题目的考点应该也在这里吧。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。