#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <map>
using namespace std;
char IntToChar(int x) { //数字转换成字符
if (x < 10) {
return x + '0';
} else {
return x - 10 + 'a';
}
}
int CharToInt(char
c) { //字符转换成数字,这里主要是超过10进制的时候会用到字母
if (c >= '0' && c <= '9') {
return c - '0';
} else {
return c - 'A' + 10;
}
}
int main() {
stack<char> mystack;
int m, n;
while (scanf("%d%d", &m, &n) != EOF) {
string num;
cin >> num;
//先转换成10进制
long long cur = 0;
for (int i = 0; i < num.size(); i++) {
cur *= m;
cur += CharToInt(num[i]);
}
//此时cur就为10进制
//再转为n进制
//printf("%d", cur);
while (cur != 0) {
char t = IntToChar(cur % n);
mystack.push(t);
cur /= n;
}
while (!mystack.empty()) {
char t = mystack.top();
mystack.pop();
printf("%c", t);
}
printf("\n");
}
}
// 64 位输出请用 printf("%lld")
主要就是有一个字符很麻烦,要有两个函数来帮忙。其余的跟平常的进制转换没什么区别。

京公网安备 11010502036488号