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')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值