Example of C++ conversion of interview questions

  • 2020-05-30 20:55:18
  • OfStack

An instance of C++ base conversion

One interview question requires input of base 10 number and output of base 106. It can be printed with printf %d,%c,%s, but cannot be printed with %x.

I've written two algorithms, which are pretty neat, and I'll paste them here.


//  The first 1 Kind of algorithm, scan shift from low to high, required 1 Two arrays in reverse order, 1 Secondary output  
 
#include <stdio.h> 
 
#define MAX_HEX_NUM 16 
#define OUT_DATA_LEN sizeof(int)*2 // 2 a 16 Base number representation 1 bytes 
 
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; 
} 

Here is the second algorithm, which scans from the top to the bottom and prints the results directly.


#include <stdio.h> 
 
#define BITS_OF_INT  sizeof(int)*8 // int Number of bits  
#define OUT_DATA_LEN sizeof(int)*2 // 2 a 16 Base number representation 1 bytes  
 
int printHex( int num ) 
{ 
  int i; 
 
  printf("0x"); 
  for(i=0;i<OUT_DATA_LEN;i++) 
  { 
    unsigned int res = num & 0xf0000000; // Note: must be used  unsigned int To receive, otherwise you will get a conversion error when you enter a negative number  
    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"); 
} 

Both of these algorithms actually use a shift instead of a division, which is much more efficient, and I think the point of the problem is here.

If you have any questions, please leave a message or come to the site community to exchange discussion, thank you for reading, hope to help you, thank you for your support of the site!


Related articles: