def multi(x, y):
return int(x) * int(y)
def karatsuba(x, y):
x = str(x)
y = str(y)
n = max(len(x), len(y))
if n == 1:
return multi(x, y)
half_n = n // 2
x_l = x[:-half_n]
x_r = x[-half_n:]
y_l = y[:-half_n]
y_r = y[-half_n:]
if x_l == '':
x_l = 0
if x_r == '':
x_r = 0
if y_l == '':
y_l = 0
if y_r == '':
y_r = 0
sum_x = (int(x_l) + int(x_r))
sum_y = (int(y_l) + int(y_r))
Res1 = karatsuba(x_l, y_l)
Res2 = karatsuba(x_r, y_r)
Res3 = karatsuba(sum_x, sum_y)
return ((pow(100, half_n) * Res1) + (pow(10, half_n) * (Res3 - Res1 - Res2)) + Res2)
class Catapult(Exception):
pass
def recursive(x):
if not x:
raise Catapult
recursive(x - 1)
try:
recursive(10)
except Catapult:
print("ну слава богу")
def print_links_at_tail(link = nil)
if link === nil
link = @head
print_links_at_tail(link)
return # !!!!!!!!!!!!!!!!!!!!!!!!!!!!
end
print_links_at_tail(link.next_link) if link.next_link != nil
puts link.value
end
end