服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++面试题之进制转换的实例

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

2021-06-07 15:09Jhuster C/C++

这篇文章主要介绍了C++面试题之进制转换的实例的相关资料,希望通过本文能帮助到大家,让大家理解掌握这样的知识,需要的朋友可以参考下

C++进制转换的实例

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 第一种算法,从低位到高位扫描移位,需要一个数组辅助倒序,一次性输出结果
 
#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] = '\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;
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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");
}

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

服务器之家推荐一款在线任意进制转换工具:https://tool.zzvips.com/t/hex/ 有需要的朋友可以去看看。

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

原文链接:http://ticktick.blog.51cto.com/823160/844191

延伸 · 阅读

精彩推荐