#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int get(char ch){
if(ch>='0'&&ch<='9'){
return ch-'0';
}
else if(ch>='a'&&ch<='z'){
return ch-'a'+10;
}
}
long long change(string str,long long radix){//转换进制
long long result=0,tmp=1;
int number;
for(int i=str.length()-1;i>=0;i--){
number=get(str[i]);
result+=number*tmp;
if(result<0) return -1;
tmp*=radix;
}
return result;
}
int main(){
string n1,n2;
long long tag,rad1,minrad2,maxrad2,m1,m2;
cin>>n1>>n2>>tag>>rad1;
if(tag==2){
string tmp=n2;
n2=n1;
n1=tmp;
}
m1=change(n1,rad1);
minrad2=0;
for(int i=0;i<n2.length();i++){
long long t=get(n2[i]);
if(t>minrad2){
minrad2=t+1;
}
}
maxrad2=m1+1;
while(maxrad2>=minrad2){
long rad2=(minrad2+maxrad2)/2;
m2=change(n2,rad2);
if(m2>m1||m2==-1){
maxrad2=rad2-1;
}
else if(m2<m1){
minrad2=rad2+1;
}
else{
cout<<rad2<<endl;
return 0;
}
}
cout<<"Impossible"<<endl;
return 0;
}
PAT 1010. Radix (25)
猜你喜欢
转载自blog.csdn.net/chan_yeol/article/details/53426101
今日推荐
周排行