C++面試題之進(jìn)制轉(zhuǎn)換的實(shí)例
C++進(jìn)制轉(zhuǎn)換的實(shí)例
一個(gè)面試題,要求輸入十進(jìn)制數(shù),輸出十六進(jìn)制,可以使用printf打印%d,%c,%s來(lái)輸出,但不能使用 %x 打印。
寫(xiě)了兩種算法,還算比較簡(jiǎn)潔,粘貼在此。
// 第一種算法,從低位到高位掃描移位,需要一個(gè)數(shù)組輔助倒序,一次性輸出結(jié)果 #include <stdio.h> #define MAX_HEX_NUM 16 #define OUT_DATA_LEN sizeof(int)*2 // 2個(gè)16進(jìn)制數(shù)表示1個(gè)字節(jié) 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] = '\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); return 0; }
下面是第二種算法,從高位向低位掃描,得到結(jié)果直接打印。
#include <stdio.h> #define BITS_OF_INT sizeof(int)*8 // int的位數(shù) #define OUT_DATA_LEN sizeof(int)*2 // 2個(gè)16進(jìn)制數(shù)表示1個(gè)字節(jié) int printHex( int num ) { int i; printf("0x"); for(i=0;i<OUT_DATA_LEN;i++) { unsigned int res = num & 0xf0000000; //注意,必須用 unsigned int來(lái)接收,否則當(dāng)輸入負(fù)數(shù)的時(shí)候會(huì)轉(zhuǎn)換錯(cuò)誤 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"); }
兩種算法其實(shí)都是采用移位的方式來(lái)運(yùn)算,而不是采用除法,這樣會(huì)更加高效一些,我想這個(gè)題目的考點(diǎn)應(yīng)該也在這里吧。
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
VS Code 中搭建 Qt 開(kāi)發(fā)環(huán)境方案分享
這篇文章主要介紹了VS Code 中搭建 Qt 開(kāi)發(fā)環(huán)境方案分享的相關(guān)資料,需要的朋友可以參考下2022-12-12C++之string類(lèi)對(duì)象的容量操作詳解
通過(guò)在網(wǎng)站上的資料搜集,得到了很多關(guān)于string類(lèi)對(duì)象的容量操作,通過(guò)對(duì)這些資料的整理和加入一些自己的代碼,希望能夠給你帶來(lái)幫助2021-08-08實(shí)現(xiàn)一個(gè)內(nèi)存池管理的類(lèi)方法
下面小編就為大家?guī)?lái)一篇實(shí)現(xiàn)一個(gè)內(nèi)存池管理的類(lèi)方法。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01深入理解goto語(yǔ)句的替代實(shí)現(xiàn)方式分析
本篇文章是對(duì)goto語(yǔ)句的替代實(shí)現(xiàn)方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語(yǔ)言模式實(shí)現(xiàn)C++繼承和多態(tài)的實(shí)例代碼
本篇文章主要介紹了C語(yǔ)言模式實(shí)現(xiàn)C++繼承和多態(tài)的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07