题解 | 进制转换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")
查看21道真题和解析