思路:
将M进制数转换为N进制数。可以先将数从M进制转换为十进制,再从十进制转换为N进制。对于本题,需要注意的是,进制大于10时,就要用字符来表示,而这需要实现字符与数字之间的转换。
求解十进制数x的k进制表示时,只需不断地对x求余(对k)、求商(除以k),即可由低到高依次得到各个数位上的数。反过来,要求由k进制表示的数字的十进制值时,需要依次计算各个数位上的数字与该位权重的积(第n位的权重为k"-1),然后将它们依次累加,即可得到该十进制值。
源代码:
#include<iostream> #include<string> #include<vector> using namespace std; //例题6.4 进制转换2 //将字符转换成整型数 //题目已说明:输入时如有字母,则字母为大写。这里在转换字母是要减去'A' int CharToInt(char c) { if (c >= '0' && c <= '9') { return c - '0'; } else { return c - 'A' + 10; } } //将整型数转换成字符串 //题目已说明:输出时如有字母,则字母为小写。这里在转换字母是要加上'a' char IntToChar(int n) { if (n >= 0 && n <= 9) { return n + '0'; } else { return n - 10 + 'a'; } } int main() { int m, n; cin >> m >> n; string str; cin >> str; long long num = 0; //m进制转10进制 for (int i = 0; i < str.size(); i++) { num *= m; num += CharToInt(str[i]); } //10进制转n进制 “除n取余法” vector<char> nums; while (num != 0) { nums.push_back(IntToChar(num % n)); num /= n; } //逆序输出 for (int i = nums.size() - 1; i >= 0; i--) { cout << nums[i]; } cout << endl; return 0; }