题解 | 进制转换2
进制转换2
https://www.nowcoder.com/practice/ae4b3c4a968745618d65b866002bbd32
#include <iostream> #include<vector> #include<algorithm> #include<string> using namespace std; vector<int> div(vector<int>a, int m, int n, int& r) { int t = 0; vector<int>c; for (int i = a.size()-1; i >=0 ; i--) { c.push_back((t * m + a[i]) / n); t = (t * m + a[i]) % n; } r = t; reverse(c.begin(), c.end()); //试除法去除前导0有点不一样 while (c.size() >= 1 && c.back() == 0)c.pop_back(); return c; } int main() { int m, n; string num; while (cin >> m >> n >> num) { // 注意 while 处理多个 case int r = 0; vector<int>a; vector<int>res; for (int i = num.size() - 1; i >= 0; i--) { if (num[i] >= '0' && num[i] <= '9') a.push_back(num[i] - '0'); else a.push_back(num[i] - 'A' + 10); } while (!a.empty()) { int r = 0; a = div(a, m, n, r); res.push_back(r); } for (int i = res.size() - 1; i >= 0; i--) cout << res[i]; puts(""); } } // 64 位输出请用 printf("%lld")