解题思路:
1.将一个n进制的数转化为m进制,那么可以利用十进制来过渡,先将n进制转化为十进制,再将十进制转化为m进制,除m取余,逆序排列
2.输入n和m还有一个字符串s,对字符串进行小写转为大写,便于统一处理,然后逆序遍历,字符串的最高位反而是数值的个位,如果该位置上是字母,需要变换为数字,乘以pow(s.length( )-1-i),添加到累加器sum中,记得开long long
3.然后对于sum进行数位分离,除m取余,将余数放入到ans数组中,然后缩小m倍
4.最后倒序输出ans数组,如果该位置数字是大于9的,输出对应的大写字母,否则,直接输出
#include<bits/stdc++.h>
using namespace std;
int ans[50];
int main()
{
int n,m;
string s;
cin>>n>>s>>m;
for(int i=0;i<=s.length()-1;i++)
if(s[i]>='a'&&s[i]<='z')
s[i]=s[i]-32;//将小写字母全部转化为大写字母
long long sum=0;
int num;
for(int i=s.length()-1;i>=0;i--)
{
if(s[i]>='A'&&s[i]<='Z')//如果该位是字母
num=s[i]-55;//转化为数字
else//如果是数字
num=s[i]-'0';//系数就是s[i]
sum=sum+num*pow(n,s.length()-1-i);
}//将n进制数全部转化为数字并转换成十进制
num=0;
while(sum!=0)
{
ans[++num]=sum%m;
sum=sum/m;
}//将十进制数转化为m进制,除m取余,逆序排列
for(int i=num;i>=1;i--)//倒序输出,最高位在数组的最后一个位置
{
if(ans[i]>=10)//如果该数字大于10
{
cout<<(char)(ans[i]+55);//输出对应的大写字母
}
else
cout<<ans[i];//否则输出该数字
}
return 0;
}