文章目录
- 题目
- AC代码
题目
本题链接:进制转换2
本博客给出本题截图:
AC代码
代码解释:其实就是涉及到高精度的进制转换问题,高精度讲解详见:高精度运算,高精度模板见:高精度算法模板,本题和进制转换这道题并没有很大的区别,唯一区别的地方就是本题是直接由 m 进制转换为 n 进制,我们当然可以考虑成由 m 进制先转换为 10 进制,进而由 10 进制转换为 n 进制,但是这么去实现的话,我们需要做高精度加法,高精度乘法,高精度除法,这样显然是很复杂的,我们也可以直接把 m 进制转换为 n 进制,详细操作见代码部分,建议手动模拟
代码:
#include <iostream> #include <cstring> #include <string> #include <algorithm> #include <vector> using namespace std; int main() { int m, n; string x; cin >> m >> n >> x; vector<int> A; for (int i = 0; i < x.size(); i ++ ) { char c = x[x.size() - 1 - i]; if (c >= 'A') A.push_back(c - 'A' + 10); else A.push_back(c - '0'); } string res; while (A.size()) { int r = 0; for (int i = A.size() - 1; i >= 0; i -- ) { A[i] += r * m; r = A[i] % n; A[i] /= n; } while (A.size() && A.back() == 0) A.pop_back(); if (r >= 10) res += r - 10 + 'a'; else res += to_string(r); } reverse(res.begin(), res.end()); cout << res << endl; return 0; }