#include <iostream>
#include <string>
#include <cmath>
#define long long long
using namespace std;
long change(string a,long radix){
long a0=0;
long len=a.size();
for(long i=0;i<len;i++){
long num;
if(a[len-i-1]>='0'&&a[len-i-1]<='9'){
num=a[len-i-1]-'0';
}else{
num=a[len-i-1]-'a'+10;
}
a0+=num*pow(radix,i);
}
return a0;
}
long findmax(string s){
long maxnum=-1;
for(long i=0;i<s.size();i++){
long num;
if(s[i]>='0'&&s[i]<='9'){
num=s[i]-'0';
}else{
num=s[i]-'a'+10;
}
if(num>maxnum){
maxnum=num;
}
}
return maxnum+1;
}
long findradix(long low,long high,string a,long b){
if(low>high){
return -1;
}else{
long mid=(low+high)/2;
long a0=change(a,mid);
if(a0==b){
return mid;
}else if(a0>b||a0<0){
return findradix(low,mid-1,a,b);
}else{
return findradix(mid+1,high,a,b);
}
}
}
int main()
{
string a,b;
cin>>a>>b;
long flag,radix;
cin>>flag>>radix;
//将所有数转化为10进制并保存
long a0=0,b0=0,res;
if(flag==1){
a0=change(a,radix);
radix=findmax(b);
res=findradix(radix,max(radix,a0)+1,b,a0);
}else{
b0=change(b,radix);
radix=findmax(a);
res=findradix(radix,max(radix,b0)+1,a,b0);
}//转化为十进制
if(res==-1){
cout<<"Impossible"<<endl;
}else{
cout<<res<<endl;
}
return 0;
}
怎么说呢?
时间能优化就优化
注意溢出处理
就酱