题目的主要信息:

  • 在函数中将十进制整数转变成十六进制字符串后返回
  • 字母用大写

具体做法:

十进制到十六进制我们可以用连除法,每次对16取余,然后除掉16之后继续取余,直到数为0.因为连除法是逆向相连,因此我们每次得到一个余数,就将其接在字符串首部。 alt

为了方便我们取字母,我们准备一个16长度的字符数组记录0-9A-F来代替余数0-15,这样我们得到余数的时候直接访问数组就可以得到相应字符了。

#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 res = "";
    char hex[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //记录十六进制所需的字符
    while(n > 0){ //连除16取余
        res = hex[n % 16] + res; //每次加在字符串首
        n /= 16;
    }
    return res;
}

复杂度分析:

  • 时间复杂度:O(log16n)O(log_{16}n),连除法除的次数为这个数的log级别
  • 空间复杂度:O(1)O(1),无额外空间