题目描述
对于任意两个正整数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')