题目大意
现在知道N1和N2两个数,且知道其中一个数的进制,求另一个数在什么进制下等于另一个数
输入
每组包含一个测试样例,每个样例是为一行,一行中有4个正整数:
N1 N2 tag radix
N1
和N2
都不超过10位,且每一位都属于集合{ 0-9, a
-z
} ,其中a
-z
表示10~35,如果tag
是1那么radix
就是N1
的进制否则就是N2
的进制
输出
对每个样例,在一行内输出使N1
=N2
的进制,如果不存在这样的进制,就输出Impossible
。如果有多个进制满足条件,输出最小的
样例输入
6 110 1 10
1 ab 1 2
样例输出
2
Impossible
解析
先将已知进制的数转成10进制后,再二分进行查找符合的进制值
def tran(s, n):
res = 0
for i in range(len(s) - 1, -1, -1):
res += (ord(s[i]) - ord('0') if s[i].isdigit() else
ord(s[i]) - ord('a') + 10) * pow(n, len(s) - 1 - i)
return res
def findRadix(n, s):
c = max(s)
low = ord(c) - ord('0') if c.isdigit() else ord(c) - ord('a') + 10
low += 1
hight = max(low, n)
while low <= hight:
mid = (low + hight) // 2
tmp = tran(s, mid)
if tmp > n:
hight = mid - 1
elif tmp < n:
low = mid + 1
else:
return mid
return -1
n1, n2, tag, radix = input().split()
tag, radix = int(tag), int(radix)
ans = findRadix(tran(n1, radix), n2) if tag == 1 else findRadix(tran(n2, radix), n1)
print("Impossible" if ans == -1 else ans)
exit(0)