1.问题描述
给定一个M进制的数x,实现对x向任意的一个非M进制的数的转换。
思路:
2.定义int n(输入的数字的进制),string sl(输入的数字),int m(转换后数字的进制),char ans[100](存放字符)
3.用map<char,int>num1;map<int,char>num2;存放对应关系;
4.num = num * n + num1[sl[i]];//转化成10进制;
5.ans[tem++] = num2[num % m], num /= m;//转化成m进制
6.逆向输出字符数组;
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
int n, m, num, tem; string sl; char ans[100];
map<char, int> num1; //把其他进制数字转成10进制;用map建立对应关系;
map<int, char> num2;
int main() {
for (int i = 0; i < 10; i++)
num1[i + '0'] = i, num2[i] = i + '0';
for (char i = 'A'; i <= 'F'; i++) {
num1[i] = i - 'A' + 10, num2[i - 'A' + 10] = i;
}
cin >> n >> sl >> m;
for (int i = 0; i < sl.length(); i++)
num = num * n + num1[sl[i]];//转化成10进制;
while (num)
ans[tem++] = num2[num % m], num /= m;//转化成m进制;
for (int i = tem - 1; i >= 0; i--)
{
printf("%c", ans[i]);
}
return 0;
}