Операция умножения это замена многократного сложения.
Пусть определена операция сложения на объектами типа A.
Необходимо выполнить операцию
\(A\cdot n =\) \(\underbrace {A+...+A}_{n\ раз}\) , то есть организовать умножение объекта типа A на натуральное число n
Ваша программа должна быть достаточно эффективной и выполнять не более, чем
\(2\cdot log_2(n) \) операций сложений.
Даны объект
A /представлен как строка/ и натуральное число
n. Напишите фрагмент кода, эффективно выполняющий операцию
\(A\cdot n\)
В шаблоне представлен фрагмент кода, выполняющий операцию
\(A\cdot n\) за
n операций сложения
def multi( A, n ): # умножение объекта A на натуральное число n
rez=None
for i in range(n):
rez=my_add(rez,A) # my_add(x,y) - выполняет сложение объектов x+y (если один есть None, то возвращает значение другого)
return rez
Примечание:
Операция * для объектов либо неопределена, либо вернет неверный результат. Поэтому
запрещено использовать операцию * (умножение).
Подпрограмма
my_add( x, y ) возвращает результат "сложения" объектов
x и
y (если они определены) или один из объектов (если другой неопределен, то есть
my_add(None, y) возвращает
y )
Запрещенные операторы: *; def; import