题目来源:N诺
一、题目描述
二、解题思路
过程模拟,先转换为十进制,再转换为N进制即可。
注意:转换的时候可能出现字母,注意字母的表示。
用string和char类型对数据进行存储要更方便。
#include <iostream>
#include <vector>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
// 转为十进制
int Mto10(int m, string x) {
long long x_10 = 0;
int length = x.length();
int power = 1; // 当前的幂值
for (int i = 0; i < length; ++i) {
char temp = x[length - 1 - i]; // 从字符串末尾开始遍历
int digit = (temp >= 'A') ? (temp - 'A' + 10) : (temp - '0');
x_10 += power * digit;
power *= m; // 手动计算幂
}
return x_10;
}
// 转为N进制
vector<char> toN(int n, int x_10) {
vector<char> result;
while (x_10) {
long long temp = x_10 % n;
if (temp >= 10) {
result.push_back('a' + (temp - 10)); // 转换为小写字母
} else {
result.push_back('0' + temp); // 转换为数字字符
}
x_10 /= n;
}
return result;
}
int main() {
int m, n;
cin >> m >> n;
string x;
cin >> x;
int x_10 = Mto10(m, x);
vector<char> result = toN(n, x_10);
// 如果结果为空,输出0
if (result.empty()) {
cout << "0";
} else {
reverse(result.begin(), result.end());
for (char c : result) {
cout << c;
}
}
return 0;
}