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))
Другие вопросы по тегам