有更有效的实施方法吗?

时间:2018-10-20 08:34:14

标签: python python-3.x algorithm

问题陈述:

您将获得两个正整数 d  和 s 。查找最小正整数 ñ  可以被 d  且位数等于 s

输入:

第一行包含两个正整数 d  和 s  ( 1个 ≤ d ≤ 500 , 1个 ≤ s ≤ 5000 ),以空格分隔。

输出:

打印所需的数字,如果不存在则打印-1。

这是我的代码:

d_and_s = [int(x) for x in input().split()]
counter_dracula = 0
while True:
    if counter_dracula%d_and_s[0] == 0 and sum(map(int, str(counter_dracula))) == d_and_s[1]:
        break
     counter_dracula += 1
     print(counter_dracula)

那是我的实现,但是显然必须有一个更快的方法。 例如,如果输入为1350,则输出为699998。 我的代码为我提供了正确的答案,但是在此示例测试用例中,它花费的时间很长,但时间甚至更长:输入为612,输出为1000000000000000000000000000001

如何使用Python 3正确实现它们?

1 个答案:

答案 0 :(得分:2)

(是的,问题再次打开了:-))

要作一个相当大的改进,请意识到被d整除的数是d,2 * d,3 * d,4 * d,...

因此,您不必每次都将循环增加1,而是可以增加d

def sum_digits(n):
   r = 0
   while n:
       r, n = r + n % 10, n // 10
   return r

d, s = [int(x) for x in input().split()]

counter = 0

while True:
    counter += d
    if sum_digits(counter) == s:
        break
print(counter)