#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")
主要就是有一个字符很麻烦,要有两个函数来帮忙。其余的跟平常的进制转换没什么区别。