雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C++面試題之進(jìn)制轉(zhuǎn)換的實(shí)例

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點(diǎn)擊:

C++進(jìn)制轉(zhuǎn)換的實(shí)例

 一個面試題,要求輸入十進(jìn)制數(shù),輸出十六進(jìn)制,可以使用printf打印%d,%c,%s來輸出,但不能使用 %x 打印。

    寫了兩種算法,還算比較簡潔,粘貼在此。        

// 第一種算法,從低位到高位掃描移位,需要一個數(shù)組輔助倒序,一次性輸出結(jié)果 
 
#include <stdio.h> 
 
#define MAX_HEX_NUM 16 
#define OUT_DATA_LEN sizeof(int)*2 // 2個16進(jìn)制數(shù)表示1個字節(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個16進(jìn)制數(shù)表示1個字節(jié) 
 
int printHex( int num ) 
{ 
  int i; 
 
  printf("0x"); 
  for(i=0;i<OUT_DATA_LEN;i++) 
  { 
    unsigned int res = num & 0xf0000000; //注意,必須用 unsigned int來接收,否則當(dāng)輸入負(fù)數(shù)的時候會轉(zhuǎn)換錯誤 
    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í)都是采用移位的方式來運(yùn)算,而不是采用除法,這樣會更加高效一些,我想這個題目的考點(diǎn)應(yīng)該也在這里吧。

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

上一篇:zlib庫壓縮和解壓字符串STL string的實(shí)例詳解

欄    目:C語言

下一篇:C語言數(shù)據(jù)結(jié)構(gòu)之二叉樹的非遞歸后序遍歷算法

本文標(biāo)題:C++面試題之進(jìn)制轉(zhuǎn)換的實(shí)例

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/1086.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有