普通进制转换。先把M进制数转化为10进制数,再把十进制数转化为N进制数。
本来以为会超整数的范围,得用字符串转过来转过去,用了unsigned long long,就试了一下,竟然过了。。幸福来得太突然
注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。
#include<iostream>
using namespace std;
typedef unsigned long long ULL;
string transfrom(int m,int n,string x){
ULL temp=0;
string res="";
//m进制转化为10进制
for(int i=0;i<x.length();i++){
temp*=m;
if(x[i]>='A'&& x[i]<='Z'){
temp+=x[i]-'A'+10;
}
else{
temp+=x[i]-'0';
}
}
//10进制转化为n进制
while(temp){
int t=temp%n;
if(t>=10){
res+='A'+t-10+32;
}
else{
res+='0'+t;
}
temp/=n;
}
return res;
}
int main(){
int m,n;
cin>>m>>n;
string x;
cin>>x;
if(x=="0"){
cout<<"0"<<endl;
}
else{
string result=transfrom(m,n,x);
for(int i=result.length()-1;i>=0;i--){
cout<<result[i];
}
}
cout<<endl;
return 0;
}