题解A30623.【进制转换】进制转换
2025-08-27 21:03:49
发布于:上海
1阅读
0回复
0点赞
1.先把 n 进制字符串按权展开求出十进制值(long long 足以)。
2.再用“除 m 取余”法把十进制值转成 m 进制字符串,注意 10~15 用 ‘A’~‘F’ 输出。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// 字符 → 数值
int charToVal(char c) {
if (c >= '0' && c <= '9') return c - '0';
if (c >= 'A' && c <= 'F') return c - 'A' + 10;
return 0; // 保证输入合法
}
// 数值 → 字符
char valToChar(int v) {
if (v < 10) return char(v + '0');
return char(v - 10 + 'A');
}
int main() {
int n, m;
string num;
if (!(cin >> n >> num >> m)) return 0;
/* 第一步:n 进制 → 十进制 */
long long decimal = 0;
for (char ch : num) {
decimal = decimal * n + charToVal(ch);
}
/* 第二步:十进制 → m 进制 */
if (decimal == 0) { // 特判 0
cout << 0;
return 0;
}
string res;
while (decimal > 0) {
int r = decimal % m;
res.push_back(valToChar(r));
decimal /= m;
}
reverse(res.begin(), res.end());
cout << res;
return 0;
}
这里空空如也
有帮助,赞一个