题目的主要信息:
- 在函数中将十进制整数转变成十六进制字符串后返回
- 字母用大写
具体做法:
十进制到十六进制我们可以用连除法,每次对16取余,然后除掉16之后继续取余,直到数为0.因为连除法是逆向相连,因此我们每次得到一个余数,就将其接在字符串首部。
为了方便我们取字母,我们准备一个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;
}
复杂度分析:
- 时间复杂度:,连除法除的次数为这个数的log级别
- 空间复杂度:,无额外空间