题目描述
给定一个 NN 进制数 SS,请你将它转换为 MM 进制。
输入描述
第一行为一个整数 TT,表示测试数据数量。 (1≤T≤1051≤T≤105)
每个测试用例包含两行,第一行包含两个整数 N,MN,M。
第二行输入一个字符串 SS,表示 NN 进制数。
数据范围保证:2≤N,M≤162≤N,M≤16,若 N≥10N≥10,则用 A∼FA∼F 表示字码 10∼1510∼15。保证 SS 对应的十进制数的位数不超过 1010。
输出描述
输出共 TT,每行表示一组数据的答案。
输入样例
2
2 10
10101
11 2
1793A5068
输出样例
21
10101111001010100111010101011
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define endl '\n'
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using PII = pair<int, int>;
const int N = 1e4 + 5;
// 十进制转任意进制
string decimalToBase(int num, int base) {
if (num == 0) return "0";
string result;
while (num > 0) {
int remainder = num % base;
char digit = (remainder < 10) ? ('0' + remainder) : ('A' + remainder - 10);
result.push_back(digit);
num /= base;
}
reverse(result.begin(), result.end());
return result;
}
// 任意进制转十进制
int baseToDecimal(const string& num, int base) {
int decimal = 0;
for (size_t i = 0; i < num.length(); i++) {
char c = num[i];
int digit = (c >= '0' && c <= '9') ? (c - '0') : (c - 'A' + 10);
decimal = decimal * base + digit;
}
return decimal;
}
// 任意进制之间的转换
string convertBase(const string& num, int fromBase, int toBase) {
int decimal = baseToDecimal(num, fromBase);
return decimalToBase(decimal, toBase);
}
void solve() {
int n, m;
string s;
cin >> n >> m;
cin >> s;
cout << convertBase(s, n, m) << endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) solve();
return 0;
}
/*
* _oo0oo_
* o8888888o
* 88" . "88
* (| -_- |)
* 0\ = /0
* ___/`---'\___
* .' \\| |// '.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' |_/ |
* \ .-\__ '-' ___/-. /
* ___'. .' /--.--\ `. .'___
* ."" '< `.___\_<|>_/___.' >' "".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `_. \_ __\ /__ _/ .-` / /
* =====`-.____`.___ \_____/___.-`___.-'=====
* `=---='
*
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 佛祖保佑 永不宕机 永无BUG
*/