P1143 进制转换
思路:将n进制数转为十进制数,再转为m进制数
#include<iostream>
#include<algorithm>
using namespace std;
// 将字符 c 转为对应十进制
int ord(char c) {
return (c >= '0' && c <= '9') ? c - '0' :10 + c - 'A';
}
// 将 n 进制数转换为十进制数
int toDecimal(string s, int n) {
int base = 1;
int r = 0;
for (int i = s.length() - 1; i >= 0; i --) {
r += ord(s[i]) * base;
base *= n;
}
return r;
}
// 将十进制数转换为 m 进制数
string toBase(int d, int m) {
const string mp = "0123456789ABCDEF";
string r;
while(d > 0) {
r += mp[d % m];
d /= m;
}
reverse(r.begin(), r.end());
return r;
}
int main() {
int n, m;
string s;
cin >> n >> s >> m;
int decimal = toDecimal(s, n);
string r = toBase(decimal, m);
cout << r << endl;
return 0;
}