预备知识

  1. 十进制转十六进制规则
    十六进制每一位上可以是从小到大为 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 一共16个数,即逢 16 进1,其中用 A,B,C,D,E,F(字母使用大写)这六个字母来分别表示10,11,12,13,14,15。
    十进制转化为十六进制计算方式,简单说就是整数除以 16 取余,直到商为 0 为止,然后从最后一个余数读到第一个。由于每次除后得到的余数可能会大于 9,而十六进制采用 A、B、C、D、E、F 表示10,11,12,13,14,15,所以要建立这之间的关系,可以采用查表法。
  2. C++ string 类添加字符的函数 pushback()。

思路、步骤

string toHexString(int n) 实现思路:

  1. 创建一个 string 对象,用于保存转换后的十六进制字符串;
  2. 创建一个字符数组,该字符数组中保存 16 进制表示所需用到的字符,1、2、3、...、9、A、B、C、D、E、F;
  3. 根据十进制转十六进制公式,循环计算商和模,直到商为 0,将模(即余数)保存到一个整数数组中;
  4. 反向遍历余数的数组,根据查表法,从第 2 步中对应的字符添加到 string 对象中,遍历结束,得到转换后的十六进制字符串。

代码实现

#include <iostream>
#include <string>
using namespace std;

string toHexString(int n);

int main() {

	int n;
	cin >> n;

	string hexStr = toHexString(n);
	cout << hexStr << endl;

	return 0;
}

string toHexString(int n) {
	string hexStr;
	int i = 0, m, num[100];
	char hex[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };

	do {
		num[i++] = n % 16;
		n = n / 16;
	} while (n > 0);

	for (i = i - 1; i >= 0; i--) {
		m = num[i];
		hexStr.push_back(hex[m]);
	}
	
	return hexStr;
}