C++10进制转16进制

xiaoxiao2021-02-28  212

方法一:

推荐 直接除以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; }

转载请注明原文地址: https://www.6miu.com/read-48893.html

最新回复(0)