Отрицательная степень
Вы решили задачу. Теперь можно сравнить подходы.
Отрицательный показатель заменяем обратным основанием.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Быстрое возведение
Двоичная запись показателя позволяет за шаг уменьшить показатель вдвое.
def power(a, n):
if n < 0:
a, n = 1 / a, -n
result = 1.0
while n:
if n % 2:
result *= a
a *= a
n //= 2
return result
print(power(float(input()), int(input())))
Время: O(log(|n|+1)). Память: O(1).
Другой способ: Повторное умножение
Сначала вычисляем положительную степень, затем при необходимости берём обратную.
def power(a, n):
result = 1.0
for _ in range(abs(n)):
result *= a
return 1 / result if n < 0 else result
print(power(float(input()), int(input())))
Время: O(|n|). Память: O(1).
На что обратить внимание
- При n=0 ответ 1; при очень больших показателях float может переполниться.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.