2018爱奇艺校招【循环数比较】Python解法

题目描述

对于任意两个正整数x和k,我们定义repeat(x, k)为将x重复写k次形成的数,例如repeat(1234, 3) = 123412341234,repeat(20,2) = 2020.
牛牛现在给出4个整数x1, k1, x2, k2, 其中v1 = (x1, k1), v2 = (x2, k2),请你来比较v1和v2的大小。

输入描述:

输入包括一行,一行中有4个正整数x1, k1, x2, k2(1 ≤ x1,x2 ≤ 10^9, 1 ≤ k1,k2 ≤ 50),以空格分割

输出描述:

如果v1小于v2输出"Less",v1等于v2输出"Equal",v1大于v2输出"Greater".

思路

两个正整数循环不同的次数得到两个整数,比较这两个数的大小。首先,考虑得到的数字会很大,因此,不可能在数字域进行比较,转换到字符串域进行。

比较数字的大小,首先要比长度,如果长度不等,则更长的数比较大;如果长度相等,再设计算法进行比较。

题目中说明,数字是由正整数循环得到的,因此是有规律可循的,博主采用比较两个数公共的循环长度内的数字大小的方式设计算法,进一步降低了复杂度。而两个数的公共最小循环长度,则是两个基本正整数长度的最小公倍数。

以下是Python代码:

line = input().split()
x1, lx1 = line[0], len(line[0])
k1 = int(line[1])
x2, lx2 = line[2], len(line[2])
k2 = int(line[3])
# 最小公倍数函数
def lcm(x, y):
    if x > y:
        greater = x
    else:
        greater = y

    while(True):
        if((greater % x == 0) and (greater % y == 0)):
            lcm = greater
            break
        greater += 1
    return lcm

if lx1*k1 < lx2 * k2:
    print('Less')
elif lx1*k1 > lx2*k2:
    print('Greater')
else:
    for i in range(lcm(lx1, lx2)):
        if x1[i%lx1] < x2[i%lx2]:
            print('Less')
            exit()
        elif x1[i%lx1] > x2[i%lx2]:
            print('Greater')
            exit()
    print('Equal')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章