#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define N 10+10
typedef unsigned long long LL;
LL Change_D(char A[], int r);
int Find(char A[]);
int main()
{
char N1[N], N2[N];
int tag, radix, minr;
LL ND1, ND2, ans;
cin >> N1 >> N2 >> tag >> radix;
if (tag == 2)
{
char tem[N];
strcpy(tem, N2);
strcpy(N2, N1);
strcpy(N1, tem);
}
ND1 = Change_D(N1, radix);
minr = Find(N2);
LL l = minr;
LL r = ND1;
while (l < r)
{
ans = (l + r) >> 1;
ND2 = Change_D(N2, ans);
if (ND1 == ND2)
l = r = ans;
else if (ND2 > ND1)
r = ans - 1;
else if (ND2 < ND1)
l = ans + 1;
}
if ((Change_D(N2, l) == ND1))
printf("%llu\n", l);
else
printf("Impossible\n");
system("pause");
return 0;
}
LL Change_D(char A[], int r)
{
LL V, L;
L = strlen(A);
V = 0;
for (LL i = 0; i < L ; i++)
{
V *= r;
if (A[i] <= '9')
V += (A[i] - '0');
else
V += (A[i] - 'a' + 10);
}
return V;
}
int Find(char A[])
{
int L = strlen(A);
int minr=0;
for (int i = 0; i < L; i++)
{
if (A[i] <= '9'&& A[i] >= '0')
minr = max(minr, A[i] - '0');
else
minr = max(minr, A[i] - 'a' + 10);
}
return minr+1;
}
1010
最新推荐文章于 2025-07-24 09:44:33 发布