1010 Radix (Python实现)

Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number.

Now for any pair of positive integers N​1​​ and N​2​​, your task is to find the radix of one number while that of the other is given.

Input Specification:

Each input file contains one test case. Each case occupies a line which contains 4 positive integers:


N1 N2 tag radix

Here N1 and N2 each has no more than 10 digits. A digit is less than its radix and is chosen from the set { 0-9, a-z } where 0-9 represent the decimal numbers 0-9, and a-z represent the decimal numbers 10-35. The last number radix is the radix of N1 if tag is 1, or of N2 if tag is 2.

Output Specification:

For each test case, print in one line the radix of the other number so that the equation N1 = N2 is true. If the equation is impossible, print Impossible. If the solution is not unique, output the smallest possible radix.

Sample Input 1:

6 110 1 10

Sample Output 1:

2

Sample Input 2:

1 ab 1 2

Sample Output 2:

Impossible

Python实现:

def transform(num, radix):
    count = 0
    len_num = len(num)
    for i in range(len_num):
        count += num_dict[num[i]]*pow(radix, len_num-i-1)
    return count


n1, n2, tag, radix = input().split()
radix = int(radix)
num_dict = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'a': 10, 'b': 11, 'c': 12,
            'd': 13, 'e': 14, 'f': 15, 'g': 16, 'h': 17, 'i': 18, 'j': 19, 'k': 20, 'l': 21, 'm': 22, 'n': 23, 'o': 24,
            'p': 25, 'q': 26, 'r': 27, 's': 28, 't': 29, 'u': 30, 'v': 31, 'w': 32, 'x': 33, 'y': 34, 'z': 35}
if tag == '2':
    t = n1
    n1 = n2
    n2 = t
n1_d = transform(n1, radix)
min_range = max([int(x, 36) for x in n2]) + 1
# 对分查找
left = max(int(x, 36) for x in n2) + 1
right = max(left, n1_d)
radix2 = 0
while left <= right:
    middle = round((left + right) / 2)
    t = transform(n2, middle)
    if t == n1_d:
        radix2 = middle
        break
    else:
        if t > n1_d:
            right = middle - 1
        else:
            left = middle + 1
if radix2 == 0:
    print("Impossible")
else:
    print(radix2)
发布了79 篇原创文章 · 获赞 100 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lee1hong/article/details/103411391