思路:短除法,然后避免10进制以上出现字符的情况我们用字符串来存
代码:
#include<bits/stdc++.h>
using namespace std;
string num;
int convert(string num,int r){
int n=0,s=1;
int len=num.length();
for(int i=len-1;i>=0;i--){
if(num[i]<='F'&&num[i]>='A'){
n+=(num[i]-'A'+10)*s; //十六进制特判一下,然后让n加上他的总数
s*=r;
}else{
n+=(num[i]-'0')*s; //10进制以下就正常搞
s*=r;
}
}
return n;
}
void output(stack<int> s){ ///输出函数,先进后出,满足短除法
while(!s.empty()){
if(s.top()<10)
cout<<s.top();
else if(s.top() >= 10)
cout<<(char)(s.top()+'A'-10); //大于10进制特判
s.pop();
}
cout<<endl;
}
void work(int n,int r){
stack<int> s;
while(n>0){
s.push(n%r); //将他取余的数压入栈中
n/=r;
}
output(s); //输出即可
}
int main(){
int o_r,n_r;
cin>>o_r;
cin>>num;
cin>>n_r;
int n=convert(num,o_r); //获取他们的十进制
work(n,n_r);
return 0;
}