很多时候我们都是以十进制为跳板,将n进制的数转换为十进制在转换为m进制,所以掌握这道题目就能解决很多进制的题目啦。
代码实现:#define _CRT_SECURE_NO_WARNINGS 1 //请你编一程序实现两种不同进制之间的数据转换。 #include#include //包含了库函数pow #include using namespace std; int n = 0, m = 0; string str; //将n进制的数转换为十进制的数: int nToTen(int ans) { int temp = 0; for (int i = str.size() - 1, k = 0; i >= 0; i--, k++) { if (str[i] >= 'A' && str[i] <= 'F') temp = str[i] - 'A' + 10; else temp = str[i] - '0'; ans += temp * pow(n, k); } } //将十进制的数转换成m进制的数: //将十进制的数转换成其他进制的数使用短除法: //将十进制转换成其他进制的数,数字中可能会出现字符 void TenToM(int ans) { str.clear(); while (ans != 0) { int temp = ans % m; ans /= m; // 只考虑2 到16 进制以内的情况 if (temp >= 10 && temp <= 16) { str += temp - 10 + 'A'; } else str += to_string(temp); } reverse(str.begin(), str.end()); } int main() { //输入: cin >> n >> str >> m; int ans = 0; ans = nToTen(ans); TenToM(ans); for (auto x : str) cout << x; cout << endl; return 0; }
学会了进制转换,我们不妨来看两道题目:
第一道题设计的知识点是将十进制的数转换成16进制的数
#include#include using namespace std; int main() { int n = 0, ans = 0; cin >> n; if(n == 0) cout << 1 << endl; else { while (n != 0) { int temp = n % 16; n /= 16; char op; if(temp >= 10 && temp <= 16) { op = temp - 10 + 'A'; if(op == 'A' || op == 'D') ans ++; else if(op == 'B') ans += 2; } else if(temp == 0 || temp == 4 || temp == 6 || temp == 9) ans++; else if(temp == 8) ans+= 2; } cout << ans << endl; } return 0; }
再来看一道力扣题目:



