方法一:
推薦 直接除以16進行計算 對結果遞歸進行轉換運算
代碼如下:
- #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進制
代碼如下:
- #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;
}