机试刷题:进制转换3
题目来源: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);// 如果结果为空,输出0if (result.empty()) {cout << "0";} else {reverse(result.begin(), result.end());for (char c : result) {cout << c;}}return 0;
}