2016-07-03 25 views
-2

Ich versuche, den Exponenten von zwei Zahlen zu finden (n, m) mit der einzigen arithmetischen Operation der Inkrementierung "+ = 1" von 1. Ich kann keine anderen Addition/Multiplikation oder Divisionsoperatoren verwenden. Das Programm kann eine Funktion oder eine Schleife so beschaffen sein, dass der Benutzer n eintritt, und sie m und das Programm berechnet n auf die Kraft des m erhöht.Python: Finden Sie den Exponenten von zwei Zahlen mit nur Inkrementierung/Addition um 1 (+ = 1), kann nicht Multiplikations-oder Division-Operatoren verwenden.

Es ist eine Frage eng im Zusammenhang mit mir bereits gebucht ABER es sucht ein, ungerade nummerierten Platz und der Additionsoperator erlaubt. Die verwandte Frage hilft mir nicht, den Wert von n um den Wert m zu erhöhen. Hier ist der Code, den ich bisher habe, multipliziert, aber nicht quadratisch basierend auf Benutzereingaben. Danke im Voraus!

n=int(input()) 
m=int(input()) 

i=0 
acc=0 
while i < m: 
    acc+=n 
    i+=1 
print(acc) 

Antwort

1

Um dies zu tun, müssen wir zuerst verstehen: Was ist Multiplikation?

a x b entspricht a + a + a +... b mal. Was ist dann Exponent? a^b entspricht a x a x a x.. b mal. Sie benötigen also zwei while-Schleifen und zwei Zähler.

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)) 
+0

sollten Sie die Schleifenzähllogik ändern, da Op nicht "- = 1" verwenden kann, aber dies ist eine triviale Modifikation, um + = 1 statt – lejlot

+1

'num + = a' zu verwenden. –

+0

Dank Moon Cheesez, der Code, den Sie zur Verfügung gestellt haben, ist einfach für mich zu folgen, da es die gleiche Art und Ebene des Codes ist, die ich gerade schreibe. Mit den Kommentaren von Paul und @ Lejot ist dein Code genau das, wonach ich gesucht habe. Danke an alle! –

1

Mit nur += 1 als arithmetische Operation könnte Ihre Lösung wie folgt aussehen:

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)) 
2

Funktionale Programmierung schön hier funktioniert. Die Addition wird wiederholt inkrementiert. Multiplikation wird Addition wiederholt. Kraft ist wiederholte Multiplikation.

Durch die Definition einer Funktion (repeat), die wiederholt eine Funktion auf ein Argument eine bestimmte Anzahl von Malen anwendet, kann man die power Funktion aufbauen.

Hier ist der Code.

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) 

Die einzige integrierte in Arithmetik durchgeführt wird, um 1 und ein Gleichheitsvergleich in der Schleife in der whilerepeat Funktion inkrementiert wird.

+0

Paul, danke für deinen Code, es funktioniert super! Aber ich bin mir nicht sicher, ob ich die Lambda-Funktion nutzen kann. Ich bin neu zu Python, also ist es etwas, das ich behalten und für zukünftige Referenz verwenden werde. –

+0

@TheodoreHarrison Sie sollten die "Lambda" -Funktion verwenden dürfen, da sie nur eine Kurzform zum Definieren einer Funktion ist. Lesen Sie mehr [hier] (https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions). –

+0

MoonCheesez, ja du hast Recht. Nach einiger Recherche ist Lambda eine viel einfachere, kürzere Möglichkeit, eine Funktion zu definieren.Danke für den Link und @PaulHankin für die Lösung. –