方法一:
推荐 直接除以16进行计算 对结果递归进行转换运算
代码如下:
[cpp] view plain copy print ? #include<iostream> #include <string> using namespace std; string DecIntToHexStr(long long num) { string str; long long Temp = num / 16; int left = num % 16; if (Temp > 0) str += DecIntToHexStr(Temp); if (left < 10) str += (left + '0'); else str += ('A' + left - 10); return str; } string DecStrToHexStr(string str) { long long Dec = 0; for (int i = 0; i < str.size(); ++i) Dec = Dec * 10 + str[i] - '0'; return DecIntToHexStr(Dec); } int main() { string DecStr; while (cin >> DecStr) { cout << "0x" + DecStrToHexStr(DecStr); } return 0; } #include<iostream> #include <string> using namespace std; string DecIntToHexStr(long long num) { string str; long long Temp = num / 16; int left = num % 16; if (Temp > 0) str += DecIntToHexStr(Temp); if (left < 10) str += (left + '0'); else str += ('A' + left - 10); return str; } string DecStrToHexStr(string str) { long long Dec = 0; for (int i = 0; i < str.size(); ++i) Dec = Dec * 10 + str[i] - '0'; return DecIntToHexStr(Dec); } int main() { string DecStr; while (cin >> DecStr) { cout << "0x" + DecStrToHexStr(DecStr); } return 0; }方法二:先十进制转为二进制,然后再每四位进行合并转为16进制
代码如下:
[cpp] view plain copy print ? #include<iostream> #include <string> #include<vector> #include <sstream> #include <math.h> using namespace std; int main() { string decStr; cin >> decStr; int num = stoi(decStr); vector<int>v; while (num) { int bit = num % 2; v.push_back(bit); num = num / 2; } reverse(v.begin(), v.end()); string hexStr; if (v.size() % 4 == 0) { for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for (int j = i * 4; j < (i + 1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; } if (temp <= 9) hexStr += temp; else hexStr += ('A' + temp - 10); } } else { int zeroNum = 4 - v.size() % 4; for (int i = 0; i < zeroNum; ++i) v.insert(v.begin(), 0); for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for (int j = i * 4; j < (i + 1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; } if (temp <= 9) { stringstream ss; string strTemp; ss << temp; ss >> strTemp; hexStr += strTemp; } else hexStr += ('A' + temp - 10); } } cout << hexStr << endl; return 0; } #include<iostream> #include <string> #include<vector> #include <sstream> #include <math.h> using namespace std; int main() { string decStr; cin >> decStr; int num = stoi(decStr); vector<int>v; while (num) { int bit = num % 2; v.push_back(bit); num = num / 2; } reverse(v.begin(), v.end()); string hexStr; if (v.size() % 4 == 0) { for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for (int j = i * 4; j < (i + 1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; } if (temp <= 9) hexStr += temp; else hexStr += ('A' + temp - 10); } } else { int zeroNum = 4 - v.size() % 4; for (int i = 0; i < zeroNum; ++i) v.insert(v.begin(), 0); for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for (int j = i * 4; j < (i + 1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; } if (temp <= 9) { stringstream ss; string strTemp; ss << temp; ss >> strTemp; hexStr += strTemp; } else hexStr += ('A' + temp - 10); } } cout << hexStr << endl; return 0; }