AcWing 3374. 进制转换2
原题链接
中等
作者:
funcdfs
,
2024-04-01 21:52:11
,
所有人可见
,
阅读 14
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int a, b;
string s;
cin >> a >> b >> s;
vector<int> A;
for (int i = 0; i < s.size(); i++) {
char c = s[s.size() - i - 1];
if (c >= 'A') A.push_back(c - 'A' + 10);
else A.push_back(c - '0');
}
string ans;
if (s == "0") ans = "0";
else {
// eg: (103)_4 \to (34)5
while (A.size()) {
int r = 0;
// 直接将更新之后的商放入到A中
for (int i = A.size() - 1; i >= 0; i--) {
r = r * a; //1 前一位的余数转换为四进制
A[i] += r; //2 (两位转为四进制)(43)_4
r = A[i] % b; //4 余数更新为上商之后的余数 4
A[i] = A[i] / b; //3 上商,十进制除法b(商为003)
}
while (A.size() and A.back() == 0) A.pop_back();
if (r < 10) ans += to_string(r);
else ans += r - 10 + 'a';
}
reverse(ans.begin(), ans.end());
}
cout << ans << endl;
return 0;
}