问题陈述:
您将获得两个正整数 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)
那是我的实现,但是显然必须有一个更快的方法。
例如,如果输入为13
和50
,则输出为699998
。
我的代码为我提供了正确的答案,但是在此示例测试用例中,它花费的时间很长,但时间甚至更长:输入为61
和2
,输出为1000000000000000000000000000001
。
如何使用Python 3正确实现它们?
答案 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)