Python: найти показатель двух чисел, используя только увеличение / сложение на 1(+=1), нельзя использовать операторы умножения или деления.
Я пытаюсь найти показатель двух чисел (n,m), используя единственную арифметическую операцию увеличения "+=1" на 1. Я не могу использовать любые другие операторы сложения / умножения или деления. Программа может быть функцией или циклом, так что пользователь вводит n, а их m, и программа вычисляет n, возведенное в степень m.
Есть один вопрос, тесно связанный с моим уже опубликованным, НО он ищет одиннечетный квадрат И оператор сложения разрешен. Связанный вопрос не помогает мне поднять значение n на значение m. Вот код, который у меня есть, он будет умножаться, но не будет квадратным, основываясь на пользовательских данных. Заранее спасибо!
n=int(input())
m=int(input())
i=0
acc=0
while i < m:
acc+=n
i+=1
print(acc)
3 ответа
Функциональное программирование прекрасно работает здесь. Дополнение повторяется приращением. Умножение повторяется сложением. Мощность повторного умножения.
Определив функцию (repeat
) который неоднократно применяет функцию к аргументу заданное количество раз, можно создать power
функция.
Вот код
def repeat(f, n, x):
a = 0
while a != n:
x = f(x)
a = a + 1
return x
inc = lambda a: a+1
add = lambda a: lambda b: repeat(inc, a, b)
mult = lambda a: lambda b: repeat(add(a), b, 0)
power = lambda a: lambda b: repeat(mult(a), b, 1)
print power(3)(7)
Единственная встроенная арифметика - увеличение на 1 и сравнение на равенство в while
петля в repeat
функция.
Для этого нам нужно сначала понять: что такое умножение?
a x b
эквивалентно a + a + a +...
б раз. Тогда что такое показатель? a^b
эквивалентно a x a x a x..
б раз. Итак, вам понадобится два цикла while и два счетчика.
n = int(input("n value: "))
m = int(input("m value: "))
def add(a, b):
num = a
for i in range(b):
num += 1
return num
def multiply(a, b):
num = 0
for i in range(b):
num = add(num, a)
return num
def exponent(a, b):
num = 1
for i in range(b):
num = multiply(num, a)
return num
print(exponent(n, m))
Только с += 1
как арифметическая операция, ваше решение может выглядеть так:
def mul(n, m):
result = 0
mi = 0
while mi < m:
ni = 0
while ni < n:
result += 1
ni += 1
mi += 1
return result
def pow(n, e):
result = 1
ei = 0
while ei < e:
result = mul(result, n)
ei += 1
return result
if __name__ == '__main__':
n = int(input())
e = int(input())
print(pow(n, e))