"""karatsuba algo"""
def fast(x,y):
if len(str(x))==1 or len(str(y))==1:
return x*y
else:
n = max(len(str(x)),len(str(y)))
m = n//2
a = x//10**m
b = x%10**m
c = y//10**m
d = y%10**m
k = fast(a,c)
n = fast((a+b),(c+d))
o = fast(b,d)
return (10**2*m*k) +(10**m*(n-k-o))+(o)
print(fast(10515610,5651551460))
у python не должно быть проблем с переполнением. Тогда почему он возвращает отрицательный ответ, когда ввод большой?
print(fast(1051599610,5651460))
, вы получите441780299400
Так что это вызвано операциями. - person Ann Zen   schedule 11.06.2020n-k-o
. Поэтому, если вы видите отрицательный результат, можно предположить, что в какой-то моментn < k+o
. - person Tom Karzes   schedule 11.06.202010**2*m*k
неправильно заключен в скобки. - person user2357112 supports Monica   schedule 11.06.2020