#include <iostream> #include <cctype> #include <algorithm> #include <cmath> using namespace std; long long convert(string n, long long radix) { //把radix进制下的n转换为10进制数据 long long sum=0; for(int i=n.length()-1;i>=0;i--){ int temp=isdigit(n[i])?(n[i]-'0'):(n[i]-'a')+10; sum+=temp*pow(radix,n.length()-1-i); } return sum; } long long find_radix(string n, long long num){ //找到令两个数值相等的进制数,num是10进制数 char it=*max_element(n.begin(),n.end()); long long low=(isdigit(it)?it-'0':it-'a'+10)+1; long long high=max(num,low); while(low<=high){ long long mid=(low+high)/2; long long t=convert(n,mid); if(t<0||t>num) high=mid-1; //t可能太大超出longlong溢出,变成负数 else if(t==num) return mid; else low=mid+1; } return -1; } int main() { string n1,n2; long long tag=0,radix,result_radix; cin>>n1>>n2>>tag>>radix; result_radix=(tag==1)?find_radix(n2,convert(n1,radix)):find_radix(n1,convert(n2,radix)); if(result_radix!=-1) printf("%lld",result_radix); else printf("Impossible"); system ("pause"); return 0; }